指向指针数组和指针数组的指针之间的区别

-7 c c++

之间是什么不同int **pint *p2[5]在第一种情况下p是一个指针,指向指针的数组,我将在以后定义!但也P2指向指针的数组!!!!. int *p2[5]是一样的int p2[5];.因为在这两种情况下p2都是指针!有什么不同?

Dav*_*nan 6

int **p
Run Code Online (Sandbox Code Playgroud)

这是指向指针的指针int.因此p可以指向单个指针或指针数组.反过来*p可以指向单个int或数组int.究竟是什么背后p没有表达其类型.

int *p2[5]
Run Code Online (Sandbox Code Playgroud)

这是一个长度为5的数组指针int.这里p2是一个长度为5的数组.毫无疑问.但那怎么样p2[i]?它们可以指向单个指针,也可以指向int数组.同样,该类型中不存在该信息.

在你提出的问题中:

p2 是一个指针.

这种说法不正确.p2是一个数组,而不是一个指针.在某些情况下,p2可能会衰减到指针,但它本身不是指针.

请注意,如果您从变量开始p2,那么您可以将其指定为p:

p = p2;
Run Code Online (Sandbox Code Playgroud)

这是一个数组,p2衰减到指针.此时你知道p指向一个指针数组int.

但是,如果你只有一些p类型,int**那么你不知道p数组的点.它可能不会.换句话说,指针的类型不能完全描述它指向的内容.


你似乎对数组和指针之间的区别感到很困惑.他们不一样.数组不是指针.数组可以衰减为指针.指针可以指向数组.

也许关键的区别在于数组总是指相同的变量.另一方面,可以使指针指向不同的变量.另一个明显的区别是数组变量定义了存储.另一方面,定义指针变量则不然.您必须始终将指针指定给其他对象的地址.

  • 我告诉过你``p2`是一个数组.但你坚持认为它是一个指针.它不是.你问'p`和'p2`是什么,我告诉过你.所以,`p2`是一个数组,而不是一个指针.是的,`p2`可以*在某些上下文中衰减*到指针.但是`p2`不是指针. (3认同)
  • 听起来像你已经决定你知道答案了.你为什么甚至问这个问题? (2认同)