通过指针修改变量值:指针如何改变i的值?为何i=200?
#include <stdio.h> void functionx(int *ptr) { *ptr = *ptr + 100; } int main(void) { int i = 100; int *p = &i; printf("i = %d\n", i); functionx(p); printf("i = %d\n", i); return 0; }
指针修改变量i的原理及结果分析
指针是存储内存地址的变量
在main函数里,int *p = &i;这行代码中,&i是取变量i的内存地址,把这个地址赋值给指针变量p后,p就相当于“指向”了i所在的内存单元。函数调用传递的是内存地址
调用functionx(p)时,实际是把p存储的i的地址传给了函数形参ptr。此时ptr和p指向的是同一个内存位置——也就是i的存储地址。解引用操作直接操作目标内存
在functionx里,*ptr是解引用运算符,作用是访问ptr指向的内存地址里的数据。
执行*ptr = *ptr + 100;时,先通过*ptr取出该内存里的当前值(也就是i的初始值100),加100得到200后,再通过*ptr把200写回同一个内存地址。因为这个地址就是i的存储位置,所以i的值被直接修改。结果为200的原因
初始时i的值是100,第一次printf输出100;经过functionx对i所在内存的修改后,i的值变成100+100=200,因此第二次printf输出200。
内容的提问来源于stack exchange,提问作者Ady Alex
相关产品推荐
相关产品推荐

