C ++指针 - 这里保存了什么值?

时间:2011-01-27 17:45:18

标签: c++ pointers

如果我有以下指针变量声明:

  

int * a;
  int ** c;

关于类型和每个将包含的值,它将如下所示:

a的类型为int*,并且会保留memory address

*a的类型为int,并且将保存指针指向的变量的值

c的类型为int**,并且会保留????????????????????

c*的类型为int*,并且将保存指向它的指针的内存地址

c**的类型为int,假设指针c指向指针b,指针b指向变量{{1}这里,保持的值将是变量a

的值

这种方式是否正确,除了我不确定的a

感谢。

7 个答案:

答案 0 :(得分:7)

int *a;
int **c;

你对a是正确的。更常见的是a拥有pointer to int

c的类型为int**,并且会保留pointer to a pointer to int

*c的类型为int*,并且会保留pointer to int

**c的类型为int,并且将包含整数值。 {} {}}指向cb指向b是正确的。

请参阅cdecl获取一些帮助。 :)

答案 1 :(得分:2)

  

c的类型为int **,并将保留????????????????????

'c'也包含一个内存地址,就像'a'一样。不同之处在于,取消引用时,'c'将返回另一个内存地址。你只是添加了另一个间接层。

答案 2 :(得分:2)

在您的示例中,c将包含指向int*的指针;也就是说,c是指向指针的指针。它可以用于多维数组(如矩阵),它可以用作函数参数来更改用户的int*

答案 3 :(得分:2)

- a的类型为int *,并将保存内存地址

正确

- * a的类型为int,它将保存指针指向

的变量的值

不完全是:* a将是对地址指向的变量的引用。你在尝试* a = 8时看到了这一点;和int * x =&(* a))。 如果它是一个值你无法改变它。但由于它是一个参考,因此值被“路由”到原始位置......在这种情况下,内存指向。

- c的类型为int **,并将保留???????????????????????

c保存一个指向指向int的内存地址的内存地址。

* c包含对指向int的内存地址的引用。所以你可以这样做:* c = a;

** c与* a相同。

答案 4 :(得分:1)

每个指针都保存内存地址。在这种情况下,c是指向int*的指针,因此它将保存这样一个变量的内存地址。

通常,双指针用于在C中创建动态多阵列。您可以看到它here

答案 5 :(得分:1)

C的类型为int *。从中可以看出,它将保存int *类型的数据,其本身就是一个内存地址。 这个概念被称为远指针,并且可以有多个远指针达到一定的限制。

与int ** c一样,你也可以将int *** d指向int ** c。这就像一个队列,每个指针指向下一个指针,前面有数据作为实际变量。

答案 6 :(得分:0)

我能想到的最简单的事情就是玩空间。编译器并不在乎,但由于声明的语法和用法相同(按设计),它使推理更容易:

假设:

int ***a; // declaration

int*** a; // type of a is an int*** (read: pointer to pointer to pointer to int)
int** *a; // the type of the object pointed by a (*a) is int**
int* **a; // the type of **a is int*
int ***a; // the type of ***a is int

免责声明:这与数据类型有关。是否可以在运行时取消引用指针是一个不同的问题(它已被初始化,是否指向有效的内存......?)