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;
}