C/C++ 数组作为参数传递 指针 引用 您所在的位置:网站首页 结构体数组不能作为参数传给函数 C/C++ 数组作为参数传递 指针 引用

C/C++ 数组作为参数传递 指针 引用

2024-07-11 05:34| 来源: 网络整理| 查看: 265

文章目录 1 C++ 值传递、指针传递、引用传递详解值传递:指针传递:引用传递: 2 数组作为函数的形参2.1 一维数组传递2.2 二维数组传递总结

1 C++ 值传递、指针传递、引用传递详解 值传递:

形参是实参的拷贝,改变形参的值并不会影响外部实参的值。从被调用函数的角度来说,值传递是单向的(实参->形参),参数的值只能传入,不能传出。当函数内部需要修改参数,并且不希望这个改变影响调用者时,采用值传递。

指针传递:

形参为指向实参地址的指针,当对形参的指向操作时,就相当于对实参本身进行的操作

引用传递: 形参相当于是实参的“别名”,对形参的操作其实就是对实参的操作。在引用传递过程中,被调函数的形式参数虽然也作为局部变量在栈中开辟了内存空间,但是这时存放的是由主调函数放进来的实参变量的地址。被调函数对形参的任何操作都被处理成间接寻址,即通过栈中存放的地址访问主调函数中的实参变量。正因为如此,被调函数对形参做的任何操作都影响了主调函数中的实参变量。

下面的代码对此作出细致解释(从实参,形参在内存中存放地址的角度 说明了问题的本质,容易理解 )

#include #include using namespace std; #include using namespace std; //值传递 void change1(int n){ cout cout cout cout1}; int b[5]={1}; cout int a[10]={1}; int b[5]={1}; cout int array[10][10]; func1(array); }

注意(iAarray)可通过,去掉括号会编译错误*

由于二维数组在栈内分配的内存是连续的,需要告诉编译器偏移的点,所以第二维度不可省,必须符合,而第一维度如一维数组一样随意。因此在上述代码1.5 中void func1(int iArray[9][10])不会报错,而void func1(int iArray[10][9])会报错。

同一维数组,这边推荐使用引用,使用引用时需要保证两个维度都要ok:

//1.6 void func3(int (&pArray)[10][10]) { } int main() { int array[10][10]; func3(array); }

也可以指针的指针来表示二维数组,动态分配内存的形式,此时,严格来说,并不是二维数组。

#include #include void out(double **a,int m, int n) { int i, j; double b=0.0; for(i=0; i a[i][j] = b; b += 1.2; printf("%5.1f",a[i][j]); } std::cout


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有