C 将变量传递给函数,这种设计有效吗?
这个问题可能看起来太基本了,但请仔细看看:C 将变量传递给函数,这种设计有效吗?,c,C,这个问题可能看起来太基本了,但请仔细看看: #include <stdio.h> void f3(int *p) { *p = 100; } void f2(int *p) { f3(p); } void f1(int *p) { f2(p); } int main(int argc, char **argv) { int a; f1(&a); printf("%d\n", a); return 0; } 但是
#include <stdio.h>
void f3(int *p) {
*p = 100;
}
void f2(int *p) {
f3(p);
}
void f1(int *p) {
f2(p);
}
int main(int argc, char **argv) {
int a;
f1(&a);
printf("%d\n", a);
return 0;
}
但是对于一个局部变量,我怀疑如果调用堆栈向下两个级别,那么仅使用一个级别指针访问内存仍然有效。
我应该在每个函数调用下传递另一个级别的指针吗?(如
f1(&a)
然后f2(&p)
等等)。你所做的绝对正确。变量a始终存在,f3将接收变量a的地址。没问题 你所做的绝对正确。变量a始终存在,f3将接收变量a的地址。没问题 f2(&p)
将传递错误的地址:存储int*p
的位置,而不是存储int a
的位置。如果您尝试这样做,编译器应该警告您。是的,我只是想在这种情况下,我会更改函数定义以获取指针到指针之类的。代码是正确的。它传递一个指针。重新编辑:它不会影响a
的位置或获取方式。好的,谢谢。无关问题:我问的问题似乎太基本了。我是否应该将其取下或重写,使其在搜索时更易于访问?f2(&p)
会传递错误的地址:存储int*p
的位置,而不是存储int a
的位置。如果您尝试这样做,编译器应该警告您。是的,我只是想在这种情况下,我会更改函数定义以获取指针到指针之类的。代码是正确的。它传递一个指针。重新编辑:它不会影响a
的位置或获取方式。好的,谢谢。无关问题:我问的问题似乎太基本了。我应该把它取下来还是改写成在搜索时更容易理解的方式?
int main(int argc, char **argv) {
int *a = malloc(sizeof(int)*1);
f1(a);
printf("%d\n", a);
free(a)
return 0;
}