我在学习C编程,并且我看到了一些代码,其中人们使用双指针。我做了一些从下面搜索stackoverflow,但仍然有一个小小的问题(Why use double pointer? or Why use pointers to pointers?)双指针的定义
在下面的代码中,我的问题是我没有定义'b'为** b。现在我试图做 (* b)我得到一个编译错误。不是这个*(* b)与 *(c的地址)相同,因为'a'的地址是'c'。为什么我需要将'b'定义为** b才能真正获得'c' ?
#include <stdio.h>
int main()
{
int *a, *b, c;
c = 10;
a = &c;
b = &a;
printf("*a - %d\n *(*b): %d\n," , *a, *(*b));
return 0;
}
帮助/解释非常感谢:)
编辑:非常感谢球员的解释。事情现在已经清楚:)
当你声明一个指向整数的指针时, 'int * a'。现在,没有什么像一个“双指针”,但有一些东西像指针指向一个整数。这应该有希望给你一些问题的提示。 –
你已经告诉你的编译器b是一个指向一个整数的指针,但是你试图将它设置为指向一个整数的指针的地址。 “a”是指向一个整数的指针,“&a”不是。如果你改变“int * a,* b,c;”到“int * a,** b,c;”它会编译。 – hft
'int * a,* b,c;'表示'b'包含一个指向整数的指针。但是'b =&a;'试图让'b'把指针的地址保存为一个整数。这是什么,'b'持有指向整数的指针还是指向整数的指针的地址? –