我试图更深入地了解 C 函数中的指针参数。我编写了一个测试程序来尝试查看将单指针与双指针传递给函数然后对其进行修改之间的区别。
我有一个有两个功能的程序。第一个函数modifyMe1
将单个指针作为参数并将 a 属性更改为 7。第二个函数modifyMe2
将双指针作为参数并将 a 属性更改为 7。
我希望第一个函数modifyMe1
是“按值传递”,也就是说,如果我传入我的结构指针,C 将创建它所指向的数据的副本。而对于后者,我正在做一个“按引用传递”,它应该修改适当的结构。
然而,当我测试这个程序时,这两个函数似乎都修改了适当的结构。我知道我对指针的性质存在误解,这肯定是论据。有人可以帮我解决这个问题吗?
谢谢!
这是我所拥有的:
#include <stdio.h>
#include <stdlib.h>
struct myStructure {
int a;
int b;
};
void modifyMe1(struct myStructure *param1) {
param1->a = 7;
}
void modifyMe2(struct myStructure **param1) {
(*param1)->a = 7;
}
int main(int argc, char *argv[]) {
struct myStructure *test1;
test1 = malloc(sizeof(test1));
test1->a = 5;
test1->b = 6;
modifyMe1(test1);
printf("a: %d, b: %d\n", test1->a, test1->b);
// set it back to 5
test1->a = 5;
printf("reset. a: %d, b: %d\n", test1->a, test1->b);
modifyMe2(&test1);
printf("a: %d, b: %d\n", test1->a, test1->b);
free(test1);
return 0;
}
我的输出是:
$ ./a
a: 7, b: 6
reset. a: 5, b: 6
a: 7, b: 6