这些数组在c++中是什么意思?
What do each of these arrays mean in C++?
我收到的c++讲座幻灯片只是提到了这些,而没有解释它们的含义和它们的区别:
int (*arr)[]={...};
int *(arr[])={...};
int (&arr)[]={...};
int &(arr[])={...}; // not allowed?
这些分别是什么意思?我试着用其中的一些运行一个程序,但我得到错误,因为我不知道在初始化列表中放入什么。
-
int (*arr)[] = { ... };
这根本不是一个数组。这是一个指针,指向一个未知大小的数组。注意,这是一个标量类型。它只是一个数据指针,与其他数据指针没有本质上的区别。这意味着使用
{ ... }
初始化器的唯一方法是在{ ... }
内部指定一个适当类型的单个值。例如int (*arr)[] = { nullptr };
与
相同int (*arr)[] = nullptr;
-
int *(arr[]) = { ... };
这确实是一个数组。同样的东西也可以表示为
int *arr[] = { ... };
这是一个
int *
指针数组。它的大小取决于{ ... }
中提供了多少初始化式。例如int *arr[] = { nullptr, &some_int, &some_other_int };
声明
arr
为int *
类型的3个指针数组。 -
int (&arr)[] = { ... };
这本身不是一个数组。这是对未知大小数组的引用。同样,在这种情况下,唯一合法的
{ ... }
初始化式只能是{ ... }
中的一个int []
类型的左值。如果数组被声明为const
,您可以使用以下语法将其附加到int
的临时数组,例如const int (&arr)[] = { 1, 2, 3 };
但是没有
const
这是不可能的。(虽然我对const
的合法性也有怀疑。 -
int &(arr[]) = { ... };
试图声明一个引用数组。不允许的。
你需要使用顺时针/螺旋规则。
int (*arr)[]={...}; // pointer to array of int
int *(arr[])={...}; // array of int pointers
int (&arr)[]={...}; // a reference to an array of int
int &(arr[])={...}; // an array of int references
最后一个是非法的:为什么引用数组是非法的?
相关文章:
- 这个语法std::class<>{}(arg1, arg2) 在C++中是什么意思?
- 标准 N3337 5.2.10 第 7 条中的C++"类型"是什么意思?
- "类模板示例<int>;"语句对 C++11 是什么意思?
- 线应该是什么意思
- "CID"在AT+HTTPPARA= "CID" ,1中是什么意思
- 表达式"b=(b-x)&x"是什么意思?
- 这个表达是什么意思?
- 此代码验证公式是什么意思?
- 跟踪日志中的T.11803()是什么意思?
- 这个额外的关键字在这个 c++ 类声明中是什么意思?
- * 和 ** 在 C++ 函数声明中是什么意思?
- _T("xyz")是什么意思?
- #define Dbg(fmt,..) (0) 是什么意思? 警告:表达式无效
- 这行代码到底是什么意思?
- 在命名空间名称之前加上 :: 是什么意思?
- 从字符数组的元素中减去'a'是什么意思
- "friend"关键字在C++中是什么意思?
- 减法中的"0"是什么意思?
- 字符数组前面的加号是什么意思?
- 这里的字符串函数是什么意思