**和*[]是一样的吗?

Tam*_*shi 1 c++ arrays pointers

我的Eclipse IDE上有这对声明/定义(分别是.h和.hpp):

 A( T* [] );
Run Code Online (Sandbox Code Playgroud)

 A<T>::A(T ** p_proc) { ... }
Run Code Online (Sandbox Code Playgroud)

第一个是指针数组,另一个是指针指针.我很困惑,因为它们在这里是可以互换的; Eclipse抱怨如果我替换了**by * [],抛出语法错误.但是,当我做相反的事情时,Eclipse不会引发错误.

我的问题是双重的; 这两个符号基本上是一样的吗?是T [][]T **相同呢?当hpp文件的类型为* []但不在标题中时,为什么Eclipse会抛出语法错误?

Bri*_*ian 6

我的问题是双重的; 这两个符号基本上是一样的吗?

不,他们不是.T*[]具有指向未知大小的T类型数组,T**具有指向指针的T类型指针.数组和指针通常相同.

但是,将函数参数声明为数组类型与将其声明为相应的指针类型完全相同.如果将函数参数指定为具有数组类型,则将其"调整"为具有相应的指针类型.以相同的方式,int*并且int[]不是相同的类型,但是当你编写一个带int[]参数的函数时,它会被调整以便它需要一个int*参数.(请注意,如果参数是对数组的引用,则会禁止此调整.)

T [][]T **相同呢?

实际上T[][]根本不是一个有效的类型.在多维数组类型中,只能省略第一个边界.

当hpp文件的类型为* []但不在标题中时,为什么Eclipse会抛出语法错误?

可能是因为你在写作T*[] p_proc.正确的声明者是T* p_proc[].