记录一下C语言的值传递和指针传递

382 阅读1分钟

1.值传递:
将变量指向的存储内容,在传递/赋值时,拷贝一份给接收变量。看以下代码

int num = 100;
int num2 = num;
num2 = 40;

当执行到第三步的时候就会重新分配一块内存给变量num2,这块内存存储的变量值是40 image.png

2.指针传递:
如果是指针,就将指针变量存储的地址,传递给接收变量,如果是数组,就将数组的首地址传递给接收变量

int num = 100;
int *p = #
int * p2 = p;
*p2 = 55;
printf("num的值%d",num);//输出的结果为55

前3步的代码在内存中的布局如下:
1.声明变量num,值为100,假设变量num的内存地址为0x00AB
2.将变量num的内存地址值赋值给指针变量p,那么此时指针变量p的值【内容】为0x00AB,假设该指针变量p的内存地址为0x00DF
3.又将指针变量p的值赋值给指针变量p2,那么p2的值也就是0x00AB,假设指针变量p2的内存地址为0x00EF
image.png image.png 当执行第四步p2=55;的时候会发生以下情况:* 将变量p2的内容由0x00AB变成55,而变量p,p2的内容值都是指向变量num的内存地址,所以p和p2的这块内存的内容也都改变成55,但p和p2的内存地址还是原来的地址。 image.png