int 数组的类型是什么

What is the type of an int array?

本文关键字:是什么 类型 数组 int      更新时间:2023-10-16

我正在阅读有关C++数组的信息。我尝试了以下代码:

int main()
{
   int a[10];
   int *p;
   p = &a;
}

我收到编译器错误:

pointers.cpp:10:6: error: cannot convert ‘int (*)[10]’ to ‘int*’ in assignment
p = &a;

为了理解能够分配给指针的数组类型,我尝试了以下代码:

int main()
{
   int a[10];
   int *r[10];
   r = a;
}

编译错误:

: error: incompatible types in assignment of ‘int [10]’ to ‘int* [10]’
  r = a;

然后我试了这个:

int main()
{
   int a[10];
   int *r[10];
   r = &a;
}

编译错误:

  error: incompatible types in assignment of ‘int (*)[10]’ to ‘int* [10]’
  r = &a;

int (*)[10]的类型是什么?

>int (*)[10]是指向 10 int s 数组的指针。它指向整个数组。在你的第一个代码中,当你执行&a时,你会得到整个数组的地址,该数组具有此类型。如果你想存储它,你必须写:

int (*r)[10] = &a;

在您尝试的代码中,int *r[10] 是一个指针数组(而不是指向数组的指针(。

另一方面,int*指向单个int。例如,您可以获取其中一个数组元素的地址,&a[0] ,这将是一个int*

int *p = &a[0];

事实上,数组的名称通常会经历一种称为数组到指针转换的隐式转换,其中它成为指向数组中第一个元素的指针。我们通常说数组衰减到指向其第一个元素的指针。

int *p = a; // Here, a is decaying
正确的

方法是传递第一个元素的地址:

int a[10];
int *p;
p = &a[0];

其他可以通过递增p来访问:

p++;

int 数组的类型是什么?

每种尺寸都有不同的类型。例如,十个数组的类型是 int[10] 。还有一个不完整的类型int[],表示一个未知大小的数组。

int (*([10] 的类型是什么?

这是一个指向大小为 10 的数组的指针。

在你的第一个代码段中,&a是指向数组的指针,你不能将其分配给指向单个int的指针,因为intint[10]是不兼容的类型。在其他示例中,r 是一个指针数组,您无法为数组分配任何内容。

您可以使用以下任一方法:

int *p = a;      // implicit array-to-pointer conversion
int *p = &a[0];  // explicitly take address of element

分配指向数组第一个元素的指针。或者,如果你想要一个指向数组的指针(保留其类型的大小(,那就是

int (*p)[10] = &a;

额外的()指示这是指向数组的指针,而不是指针数组。

你只需要做

int a[10];
int *p;
p = a;

赋值 p 数组 A 的地址;为其第一个元素分配 i-e 地址。

正如错误所说,它int (*)[10] ,所以你应该使用 int (*r)[10] 而不是 int *r[10] 。额外的()是指向 10 个整数的数组和指向整数的 10 个指针的数组之间的区别。