int指针数组
Array of int pointers
我遇到了这个问题:
在下面的声明中,p是一个指向5 int数组的指针指针。
int*(*p)[5];
下列哪个语句可用于为为了使p成为3个5的阵列的阵列的第一个维度指向int类型的指针?
A。p=新的int[3][5]*;
B。p=新int(*)[3][5];
C。p=新的int[3]*[5];
D。p=新整数*[3][5];
E。p=新int(*[3])[5];
答案是什么?
我不确定我是否理解这个问题。通常情况下,我会创建一个指向5 int数组的指针,如int* p[5];
。我很好奇他们为什么要将其作为int *(*p)[5];
问题还想要什么?它是否要求对前3个int指针进行初始化(分配内存)?如果有人能向我解释这一点,我将不胜感激。
using IPA5 = int*[5];
IPA5 * p = new IPA5[3];
每个元素p[0]
、p[1]
、p[2]
只是int*
的一个普通类型数组。除了初始的动态分配之外,没有任何动态发生,其中3
被允许是一个动态量。
[0, 5)
中i
的p[0][i]
是int *
,您可以以任何方式使用它(包括使它指向另一个动态数组的第一个元素)。
你会写什么:
int* p[5];
是指向CCD_ 12的指针的五元素数组。
声明内容:
int *(*p)[5];
是指向int
的五元素指针数组的指针,即指向您刚刚编写的内容类型的指针。
换句话说;你可以做:
int * a[5];
int * (*p)[5] = &a;
你可以按如下方式在脑海中逐步阅读:
(*p) // p is a pointer
(*p)[5] // p is a pointer to an array of size 5
int * (*p)[5] // p is a pointer to an array of size 5 of type pointer to int
您需要在*p
周围加括号,否则:
int ** p[5];
将声明类型为int **
的5元素数组,或指向int
的指针,这完全是另一回事。
这个问题基本上是要求您动态分配相当于上面a
的三个内存,所以答案"D"是正确的。
答案是
D.p=新整数*[3][5]
所有其他的都是语法错误
实现
之间的差异int*p[5]
int*(*p)[5]
考虑这个例子
int*(*p)[5]
intpp[5]
pp[0][0]=新的int[5]//LHS为int,RHS为int,,编译错误
p[0][0]=新的int[5]//这是因为p[0][0]是一个指针而不是int
试着把每一个维度都看作是给你增加了额外的*
回到问题
int*(*p)[5]给您3*(***p)
以便您可以分配
p=int*[3][5]
因为它也有3*
int* p[5]
的类型为array of size 5 of int*
。它衰减为int**
,因此p + 1
将指向该数组的第二个元素。
CCD_ 22具有类型CCD_。你可以把它想象成衰变的二维数组int* [][5]
。因此,p + 1
将指向的第二个元素,即该数组的第一个维度,也就是指向指向int的5个指针之后的下一个字节。
从而得出正确答案是CCD_ 26。
(这并不是说无论p
的类型如何,其他答案都不会编译)
- 答案是什么
D
- 通常,我会创建一个指向5 int数组的指针,例如
int* p[5]
;我很好奇他们为什么以int *(*p)[5]
的身份这么做
它不是"正常"的,因为int* p[5]
不是指向5 int数组的指针,而是指向int的5指针数组。
- 问题还想要什么?它是否要求对前3个int指针进行初始化(分配内存)
目前还不清楚。从一开始就没有办法"让p成为一个由3个数组组成的数组,其中有5个指向int类型的指针"。
- 添加到数组指针
- C++语法差异:二维和一维数组(指针算术)
- 数组指针表示法C++(移动数组时)
- 复制后删除原始数组指针将前 3 个字节设置为 0
- C++访问指向结构的指针中的类数组指针
- C++编译时使用 constexpr 字符数组指针分配静态数组?
- std::flush可以用于将对象指针转换为其封闭数组指针吗
- 创建<int>对整数数组指针的矢量引用 (C++)
- 将 2D 数组指针传递给 C++ 中的函数
- 创建指针是否超过非数组指针的末尾,而不是从 C++17 中的一元运算符和未定义的行为派生?
- 队列数组指针 (C++)
- C++数组指针上的删除操作
- 对于循环不循环和检测字符数组 [指针和字符数组]
- 如何初始化数组指针对象
- 如何正确传递 2D 数组指针作为参数
- 从数组指针中获取怪异的数字
- 初始化std :: unique_ptr作为原始数组指针的初始化
- 将结构数组指针从C#传递到C
- STD :: Sort将数组指针设置为NULL
- C++数组指针错误无法将“int*”转换为“int**”