您如何准确使用运算符 **(指向指针的指针)?
我看到这些运算符用于声明变量,并由诸如
struct name_of_struct **p_strutture;
它究竟是做什么的?创建的变量是什么?
这如何等同于 *ptr[]?
它的意义是什么?
什么时候在程序中使用指向指针的指针很重要?
指向指针的指针基本上存储了另一个指针的地址。一个变量有一个内存位置,一个指针变量用于存储这个地址。类似地,指针变量具有内存地址,指向指针的指针存储这样的内存地址
该类型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;
&
运算符产生一个指向对象的指针。
如果您声明:
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 的值将为您提供指针 1 的地址。
*pointer1 的值会给你'h'
这将是相同的:*( (*myPointer)) 并且也将具有值:'h'
使用: *( (*myPoniter) + 1) 你得到的值:'e'
并且 *( *(myPointer + 1) ) 将返回:'w'
Apointer to a pointer
存储指针变量的地址。指针变量与其他变量一样被分配一个内存位置。所有指针的值的实际数据类型,无论是整数、浮点数、字符还是其他,都是一样的,都是一个长的十六进制数,代表一个内存地址。
但请记住,指针值的表示取决于平台。它们可能是简单的整数值(如在平面内存模型中),或者它们可能是结构化值,如页码和偏移量(对于分段模型),或者它们可能完全是其他东西。