int指针数组

Array of int pointers

本文关键字:数组 指针 int      更新时间:2023-10-16

我遇到了这个问题:

在下面的声明中,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指针进行初始化(分配内存)?如果有人能向我解释这一点,我将不胜感激。

F:
using IPA5 = int*[5];
IPA5 * p = new IPA5[3];

每个元素p[0]p[1]p[2]只是int*的一个普通类型数组。除了初始的动态分配之外,没有任何动态发生,其中3被允许是一个动态量。

[0, 5)ip[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类型的指针"。