哈希空间
C语言指针更新问题
现在有个指针 Node *node; 需要改变 node 的指向。
直接 node=newNode 就可以了。如果是通过一个函数实现,因为C语言中的函数参数是通过复制值的方式传递给函数。
比如以下代码:
void set(a) {
a=3
}
int main() {
int a=1;
set(a);
printf("a=%d",a);
//输出是 1 而不是 3
}
输出是 1 而不是 3 ,因为在 set 函数中 a 是复制了一份,对复制变量的更新不会改变传入参数的值。
set(a) 调用 实际等于 int _a=a; set(_a); 这样就不会改变 a的值。
那么怎么改变 a 的值呢? 把a的内存地址传过来,也就是指针。
void set(int *a) {
*a=3;
}
set(&a);//这是调用方式,取地址当指针
回到正题,Node *node ; 写一个函数来修改 node 的指向,应该怎么写呢?
void set(Node **node) {
*node=null;
}
Node *node=...;
set(&node);
set 函数中的 node 就被叫做 二级指针了。这个叫法并不准确,也不符合实际情况。正确的理解就是找到真正本体的地址,然后对应的值。而不是直接更新复制的形参,这样修改是无效的。如同上一个例子。
这个问题也有一个角度认为是 c语言不支持 引用,只有值传递导致的缺陷。这个观点也是比较容易理解的。如果支持 引用传递,就可以不复制一遍指针进行传参。直接修改指针是有效的。
本文 最佳观看地址:https://www.hashspace.cn/c-pointer-test.html 阅读 1368