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

引例:

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

  • 13
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值