什么是c语言中的“指针指针”?

时间:2013-06-30 16:12:23

标签: c pointers operators structure

你如何使用运算符**(指向指针的指针)?

我看到这些运算符用于声明变量,并由

等结构声明
struct name_of_struct **p_strutture;

它究竟做了什么?创建的变量是什么?

这相当于* ptr []?

它的意义是什么?

何时使用指向程序中重要指针的指针?

4 个答案:

答案 0 :(得分:4)

指向指针的指针基本上存储了另一个指针的地址。变量具有内存位置,指针变量用于存储该地址。类似地,指针变量具有存储器地址,并且指向存储这种存储器地址的指针

答案 1 :(得分:3)

类型struct name_of_struct **是指向struct name_of_struct指针的指针,例如:

// strutture is a struct name_of_struct object
struct name_of_struct strutture;

// p1_strutture is a struct name_of_struct * object
struct name_of_struct *p1_strutture = &strutture;

// p_strutture is a struct name_of_struct ** object
struct name_of_struct **p_strutture = &p1_strutture;

&运算符生成指向对象的指针。

答案 2 :(得分:3)

如果您声明:
char **myPointer;

你得到一个指向指针的指针。

Why would you do such a thing? 

如果您希望例如保存一些字符(文本),您可以使用二维数组,或者您可以使用指向指针的指针。

对于二维数组,最长的单词将“分配”你的数组大小(所以一个非常短的单词会浪费内存)。使用指针指针,您不会浪费内存!因此在这种情况下更优雅的是一个指针数组,该数组内的每个指针都指向一个char数组。

myPointer = calloc(2, sizeof(char*));
char pointer1[] = "hello";
char pointer2[] = "world";

*myPointer = pointer1;
*(myPointer + 1) = pointer2;

* myPointer的值将为您提供pointer1的地址。

* pointer1的值会给你'h'

这将是相同的:*((* myPointer))并且还有值:'h'

使用:*((* myPoniter)+ 1)得到值:'e'

并且*(*(myPointer + 1))会返回:'w'

答案 3 :(得分:1)

A pointer to a pointer存储指针变量的地址。指针变量被赋予一个内存位置,就像其他变量一样。所有指针值的实际数据类型,无论是整数,浮点数,字符还是其他,都是相同的,是一个代表内存地址的长十六进制数。

但请记住,指针值的表示取决于平台。它们可以是简单的整数值(如在平面存储器模型中),或者它们可以是结构化值,例如页码和偏移(对于分段模型),或者它们可以是完全不同的东西。