2

您如何准确使用运算符 **(指向指针的指针)?

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

struct name_of_struct **p_strutture;

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

这如何等同于 *ptr[]?

它的意义是什么?

什么时候在程序中使用指向指针的指针很重要?

4

4 回答 4

4

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

于 2013-06-30T16:16:04.837 回答
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;

&运算符产生一个指向对象的指针。

于 2013-06-30T16:14:59.637 回答
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 的值将为您提供指针 1 的地址。

*pointer1 的值会给你'h'

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

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

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

于 2013-06-30T16:53:37.730 回答
1

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

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

于 2013-06-30T16:28:07.347 回答