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会抛出语法错误?
我的问题是双重的; 这两个符号基本上是一样的吗?
不,他们不是.T*[]
具有指向未知大小的T
类型数组,而T**
具有指向指针的T
类型指针.数组和指针通常不相同.
但是,将函数参数声明为数组类型与将其声明为相应的指针类型完全相同.如果将函数参数指定为具有数组类型,则将其"调整"为具有相应的指针类型.以相同的方式,int*
并且int[]
不是相同的类型,但是当你编写一个带int[]
参数的函数时,它会被调整以便它需要一个int*
参数.(请注意,如果参数是对数组的引用,则会禁止此调整.)
是
T [][]
与T **
相同呢?
实际上T[][]
根本不是一个有效的类型.在多维数组类型中,只能省略第一个边界.
当hpp文件的类型为
* []
但不在标题中时,为什么Eclipse会抛出语法错误?
可能是因为你在写作T*[] p_proc
.正确的声明者是T* p_proc[]
.