C++ 指向指针的指针指向指针等同于指向指针的指针。不可能?

C++ 指向指针的指针指向指针等同于指向指针的指针。不可能?,c++,arrays,pointers,C++,Arrays,Pointers,考虑以下代码片段: #include <iostream> using namespace std; int main() { char *sr[] = {"manipuri","konkani","punjabi","hindi","telugu","maithili","odia"}; char **pt[] = {sr+2,sr+4,sr+3,sr+1,sr+6}, ***r; r = pt; for(int i=0;i<4;i++) ++r; co

考虑以下代码片段:

#include <iostream>
using namespace std;

int main()
{
  char *sr[] = {"manipuri","konkani","punjabi","hindi","telugu","maithili","odia"};
  char **pt[] = {sr+2,sr+4,sr+3,sr+1,sr+6}, ***r;
  r = pt;
  for(int i=0;i<4;i++) ++r;
  cout << **r+3;
  return 0;
}
#包括
使用名称空间std;
int main()
{
char*sr[]={“manipuri”、“konkani”、“punjabi”、“hindi”、“telugu”、“maithili”、“odia”};
字符**pt[]={sr+2,sr+4,sr+3,sr+1,sr+6},***r;
r=pt;
对于(int i=0;i
我是这样理解的。“sr”是指向字符数组的指针

sr
不是指针。它是指针数组

它的值是“manipuri”的“m”的地址

从概念上讲,数组的值是数组的所有元素。但是,当在值上下文中使用时,数组将衰减为指向第一个元素的指针。指针的值是内存地址

那么,如何将“pt”分配给“r”呢?它们是完全不同的数据类型

因为就像
sr
和其他数组一样,
pt
也会衰减为指向第一个元素的指针。
pt
的元素属于
**char
类型。因此,指向
pt
元素的指针是
***char
。这是
r
的类型

不可能

是的,可以将
T[n]
类型的对象分配给
T*
类型的对象

而pt是一个数组,它指向一个指针,该指针指向一个字符数组

pt
是一个数组。数组本身不指向。它包含指针,每个指针指向一个指向单个字符的指针。碰巧单个字符在数组中(一个字符文本)-但这一事实不能用
pt
的类型来描述



另外,您正在将字符串文字转换为
char*
。自C++11以来,这种隐式转换的格式一直不正确。甚至在C++11之前,这种转换就被弃用了。

您的意思是为(int i=0;iPointers和数组是不同的类型,但数组很容易衰减为指向数组开头的指针。将
pt
分配给
r
会将指向
pt
的第一个元素(即
char***
)的指针分配给
r
。此外,您还缺少
const
关键字: