你如何使用运算符**(指向指针的指针)?
我看到这些运算符用于声明变量,并由
等结构声明struct name_of_struct **p_strutture;
它究竟做了什么?创建的变量是什么?
这相当于* ptr []?
它的意义是什么?
何时使用指向程序中重要指针的指针?
答案 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
存储指针变量的地址。指针变量被赋予一个内存位置,就像其他变量一样。所有指针值的实际数据类型,无论是整数,浮点数,字符还是其他,都是相同的,是一个代表内存地址的长十六进制数。
但请记住,指针值的表示取决于平台。它们可以是简单的整数值(如在平面存储器模型中),或者它们可以是结构化值,例如页码和偏移(对于分段模型),或者它们可以是完全不同的东西。