我正在学习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;
}
非常感谢帮助/解释:)
编辑:非常感谢你们的解释。事情现在很清楚:)答案 0 :(得分:0)
这是一个有效的代码。
int main()
{
int *a, *b, c;
c=10;
a = &c;
b = a;
printf("*a - %d\n *(*b): %d\n,",*a, *(b));
return 0;
}
指针恰当地命名:它们“指向”记忆中的位置。
当您编写*b
时,您告诉编译器您将声明一个类型为integer的指针,以便它指向一个整数。
当您使用b = a时,您告诉编译器您也将c的地址分配给a。实际上,b是指针变量本身,它存储整数变量c的地址。因此,这样,您也可以将一个变量的地址分配给另一个指针。
现在,关于你的代码,
int main()
{
int *a, **b, c; // just change it from *b to **b
c = 10;
a = &c;
b = &a;
printf("*a - %d\n *(*b): %d\n,",*a, *(*b));
return 0;
}
您需要通过编写2 *
来指定编译器指针b是指针变量的指针。当您编写**b
时,您告诉编译器你指向另一个指针变量。同样,您也可以使用三重指针和四重指针。
这是一个供您参考的链接。 http://www.c4learn.com/c-programming/c-double-pointer/
答案 1 :(得分:0)
您可以使用c
访问*b
的值..更改您的代码littlebit ..
#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;
}
*b,*a
定义a
和b
是两个指针变量..
a=&c;
在指针c
中指定变量a
的地址。&
代表 运算符的地址。
b=a;
复制a
中b
的内容。现在b
也包含c
的地址..
打印*a
和*b
.. *a
和*b
表示包含a
和b
。因此*a
和*b
会打印c
..
您也可以使用**b
.. **b
表示b
是一个存储另一个指针变量地址的指针。
在这种情况下,代码将是,
#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;
}
a
包含c
的地址,b
包含a
的地址..因此,*a
将打印c
的值。
由于b
是双指针,我们需要*(*b)
来访问b
的包含.. *(*b)
还会打印c
的值。
答案 2 :(得分:0)
在您的代码中,您必须执行int **b;
,因为:
a
是pointer-to-integer
,因为a = &c
。
b
是pointer-to-(pointer-to-integer)
,因为您撰写了b = &a
。