如果我声明了一个指针p
as int *p
;在主模块中,我可以更改包含的地址p
通过分配p = &a;
where a
是另一个已经声明的整型变量。
我现在想通过使用以下函数来更改地址:
void change_adrs(int*q)
{
int *newad;
q = newad;
}
如果我从主模块调用这个函数
int main()
{
int *p;
int a = 0;
p = &a; // this changes the address contained by pointer p
printf("The address is %u\n", p);
change_adrs(p);
printf("The address is %u\n", p); // but this doesn't change the address
return 0;
}
地址内容不变。使用函数来完成同一任务有什么问题?
在 C 中,函数参数是按值传递的。因此,您的参数会生成一个副本,并且对该副本进行更改,而不是您期望看到修改的实际指针对象。如果您想这样做,您将需要更改函数以接受指针到指针参数,并对取消引用的参数进行更改。
例如
void foo(int** p) {
*p = NULL; /* set pointer to null */
}
void foo2(int* p) {
p = NULL; /* makes copy of p and copy is set to null*/
}
int main() {
int* k;
foo2(k); /* k unchanged */
foo(&k); /* NOW k == NULL */
}
如果您有能力使用 C++,另一种方法是更改函数以接受对指针的引用。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)