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

时间:2017-11-20 19:01:11

标签: 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;
  cout << **r+3;
  return 0;
}

以下是我的理解方式。 'sr'是指向字符数组的指针。它的值是“操纵”的“m”的地址。 'pt'是指向字符数组指针的指针数组。它的值是其他指针的地址数组。 'r'是指向指向字符指针的指针的单个指针。

如何将'pt'分配给'r'?它们是完全不同的数据类型。例如,'r'指向指向指针的指针,指针指向SINGLE字符的指针。而pt是一个ARRAY,它指向指向ARRAY字符的指针。

这怎么可能?

1 个答案:

答案 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之前,转换也已弃用。