您的位置:首页 > 编程语言 > C语言/C++

C语言中实参和形参问题&&函数使用数组作为参数的问题

2017-02-28 20:40 731 查看
引例:

void f(int a) {

   a = 3;

}

int main() {

  int b = 2;

  f(b);

}

例子中:a是形参,b是实参

传递过程&&内存情况:

在被调用前,函数的形参是不分配内存的,也就是说,不调用f()的话,a不在内存里面

一旦调用了函数,马上为函数的形参分配内存,此时分配一个int空间大小的内存给a,此时,a和b在内存中都有内存(不同的内存),传参的时候,程序传递实参的值给形参

所以:在f函数内部改变参数的值,只改变了形参的值,形参在函数结束后被释放,main里面的b值不变

当形参是数组的时候:

void f(int a[]) {

   a[2] = 3;

}

int main() {

  int b [5] = {1,1,1,1,1};

  f(b);

}

此时情况有变,实际上这种情况下实参传递的是数组的首地址,那么一旦调用函数的时候,内存里会存在两个指针变量(一个形参一个实参),这两个变量指向同一位置,当然,函数内改变形参的值不会使得main里的实参地址发生变化,但是,由于两个参数指向同一位置,所以,通过形参来改变数组元素的值之后,main里面的实参在去访问数组的时候,数组的值已经改变

&和*的区别:

例子: int a;int *b = &a;

&符号用来处理一个变量,但不是通常的-访问这个变量的内容,而是取出这个变量的地址

int *b;此时b是一个指向int空间的指针,也就是说它是一个未分配的地址
int*只用来定义,定义的变量是一个地址(索引),可以通过这个变量来对这段空间操作

而&是对一个已存在的变量取地址,取完地址之后同样可以通过地址操作

*x是找到x地址的变量,取它的值,所以*和&是反操作,&x得到x的地址*,*x得到x的值x
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐