f(i)是「把地址送进去」printf( p%p\n, p);是「把地址打印出来」送什么就打印什么完全对应2. 一步步走一遍流程① main 函数里c运行f(i);i 取变量i的地址这句话的意思把 i 的地址传给函数 f② 传到 f 函数后c运行void f(int *p)这个p就自动接住了i所以p i③ 所以这行c运行printf( p%p\n, p);打印的就是你刚才传进来的 i3. 最直观的对应关系c运行main 里 f(i); ← 传进去的是【i的地址】 ↓ f 里 p i; ← p 接住了这个地址 ↓ printf 里打印 p ← 打印出来就是刚才传进去的地址4. 最终结论f(i)传什么地址进去printf(p%p,p)就打印什么地址出来。这里的int *p意思是p 是一个指针变量用来存地址它的名字叫 p不是 *p2. 函数调用时c运行f(i);传进去的是i地址这个地址会赋值给 p也就是c运行p i;3. *p 是什么*p 不是变量名*p 是 “取 p 指向的值”所以p 地址*p 地址里存的数字最关键的一句话c运行void f(int *p) { }这里的p 才是变量*p 只是操作 p 的方式所以传进来的地址 → 给p不是给*p用一个比喻让你彻底懂p 门牌号地址*p 打开门里面的人值f(i)传进门牌号当然是交给 p门牌号变量保存不会一上来就开门*p最终正确对应关系c运行f(i); ← 传地址 ↓ p i; ← p 接住地址 ↓ *p i; ← *p 才是里面的值你现在可以这样记永远不会错**int *p 里变量名叫 p不是pp 存地址p 取值