我想知道函数参数中指针的流程。请帮助我逐行执行以下操作及其流程,
#include <stdio.h>
int main() {
int i = 97, *p = &i;
foo(&i); printf("%d ", *p);
}
void foo(int *p) {
int j = 2;
p = &j;
printf("%d ", *p);
}
答案 0 :(得分:2)
首先,在调用它之前,你应该让编译器看到foo()
的声明
#include <stdio.h>
void foo(int *p); // <<<<<<<<<< Declare your function first!
int main() {
int i = 97, *p = &i;
foo(&i); printf("%d ", *p);
}
void foo(int *p) {
int j = 2;
p = &j;
printf("%d ", *p);
}
到达 this stage 时使用它。
在foo()
内,您只是将本地堆栈上的p
更改为指向j
,而不会影响p
或i
来自{{} 1}},因为main
已经通过值(复制)传递。
如果要从函数内部更改p
的值,则需要以这种方式更改它:
i