考虑以下代码片段:
#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;
}
以下是我的理解方式。 'sr'是指向字符数组的指针。它的值是“操纵”的“m”的地址。 'pt'是指向字符数组指针的指针数组。它的值是其他指针的地址数组。 'r'是指向指向字符指针的指针的单个指针。
如何将'pt'分配给'r'?它们是完全不同的数据类型。例如,'r'指向指向指针的指针,指针指向SINGLE字符的指针。而pt是一个ARRAY,它指向指向ARRAY字符的指针。
这怎么可能?
答案 0 :(得分:1)
以下是我的理解方式。 &#39; SR&#39;是指向字符数组的指针。
sr
不是指针。它是一个指针数组。
它的值是&#34; m&#34;的地址。 &#34; manipuri&#34;。
从概念上讲,数组的值是数组的所有元素。但是,在值上下文中使用时,数组将衰减为指向第一个元素的指针。指针的值是一个内存地址。
如何分配&#39; pt&#39;到了&#39; r&#39;?它们是完全不同的数据类型。
因为就像sr
和其他数组一样,pt
也会衰变为指向第一个元素的指针。 pt
的元素属于**char
类型。因此,pt
元素的指针是***char
。哪种类型为r
。
不可能?
是的,可以将T[n]
类型的对象分配给T*
类型的对象。
虽然pt是一个指向指向ARRAY字符的指针的ARRAY。
pt
是一个数组。数组本身并不重要。它包含指针,每个指针指向指向单个字符的指针。恰好是单个字符在一个数组(字符文字)中 - 但这个事实绝不是由pt
的类型描述的。
PS。您正在将字符串文字转换为char*
。自C ++ 11以来,这种隐式转换已经形成错误。即使在C ++ 11之前,转换也已弃用。