指针将指针的指针等同于指针指向指针.不可能

Pointers to pointers to pointer equated to a pointer to a pointer. Not possible?

本文关键字:指针 不可能 等同于      更新时间:2023-10-16

考虑以下代码片段:

#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'是指向角色数组的指针。它的价值是" Manipuri"的" M"的地址。" pt"是针对角色数组的指针的一系列指针。它的价值是其他指针的地址。'r'是指向角色指针指针的单个指针。

如何将'pt'分配给" r"?它们是完全不同的数据类型。一方面," R"指向指针指向指针,该指针指向单个字符的指针。虽然PT是一个指向指针指向字符数组的指针。

这是怎么可能的?

这就是我的理解。'sr'是指向字符数组的指针。

sr不是指针。这是一系列指针。

它的值是" manipuri"的" m"的地址。

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

如何将'pt'分配给" r"?它们是完全不同的数据类型。

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

不可能?

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

pt是一个指向指针指向字符数组的指针。

pt是一个数组。阵列本身并不指向。它包含指向指向单个字符的指针的指针。碰巧的是,单个字符在数组中(字符文字) - 但事实绝不是由pt的类型描述。


ps。您正在将字符串文字转换为char*。自C 11以来,这种隐式转换已被不良形成。甚至在C 11之前,转换都被弃用。