C:*数组的大小[x]?

C:*数组的大小[x]?,c,arrays,memory,indexing,C,Arrays,Memory,Indexing,我有一个问题应该相当直截了当(我希望如此) 在c语言中,数组的大小为int数组[10][10], 例如,我理解为有10个点来存储10个整数。但是,声明为int*array[10]的数组的大小是多少?我知道*array有10个元素,但是array有多少个元素 这是我理解上的一个漏洞,我真的想澄清一下。谢谢你的帮助 int*数组[10]是一个由10个int*s组成的数组,因此元素的数量是10 详细说明,对于int*数组[10],数组变量的ty类型是int*[10],一个由10个元素组成的数组,类型为

我有一个问题应该相当直截了当(我希望如此)

在c语言中,数组的大小为
int数组[10][10],


例如,我理解为有10个点来存储10个整数。但是,声明为
int*array[10]的数组的大小是多少?我知道
*array
有10个元素,但是
array
有多少个元素


这是我理解上的一个漏洞,我真的想澄清一下。谢谢你的帮助

int*数组[10]
是一个由10个
int*
s组成的数组,因此元素的数量是10

详细说明,对于
int*数组[10]
,数组
变量的ty类型是
int*[10]
,一个由10个元素组成的数组,类型为指向整数的指针


数组大小将是平台中指向整数的指针的
10*大小

int*数组[10]
是一个由10个
int*
s组成的数组,因此元素的数量是10

详细说明,对于
int*数组[10]
,数组
变量的ty类型是
int*[10]
,一个由10个元素组成的数组,类型为指向整数的指针

数组大小将是平台中指向整数的指针的大小
10*sizeof

数组有多少个元素

array
是一个包含10个指向int的指针的数组,与
int*array[10]
相同,因此
array
有10个元素(每个元素都是指针)

数组有多少个元素


array
是由10个指向int的指针组成的数组,与
int*array[10]
相同,因此
array
有10个元素(每个元素都是指针)。

您必须理解C中的声明。 开始将其分成几个部分:

int array[10][10];
array
是变量的名称,部分
[10]
表示它是一个包含10个int数组的数组,每个数组包含10个元素(第二个
[10]

现在:

array
是变量的名称,部分
[10]
表示它是一个由10个元素组成的数组,类型为
int*
整数指针,而不是以前的整数

第一种情况下的大小是10个整数数组大小的10倍=100个整数所需的空间

在第二种情况下,将是容纳10个指向整数的指针的大小

作为旁注,您的困惑可能来自这样一个事实:C允许以相同的方式访问这两个声明的元素。即,以下将获得第二个数组的第5个整数:

int b = array[2][5];
但是差异仍然很大,因为在第一个声明中,编译器将分配连续的空间来保存所有100个整数(按照C分配方法,将其组织为10个连续的10个整数数组),在第二种情况下,将只分配一个包含10个指针的数组,每个指针指向一个包含10个整数的数组的位置。并且10个数组将不会被分配,指针也不会初始化

在这种情况下,程序员负责分配10个int数组,并将每个int数组的地址分配给指针数组


另一点需要澄清(感谢alk指出)的是,在指针数组的情况下,第二维度是未定义的,这意味着每个
int
指针数组可以是1、10、1000或任何元素。

您必须理解C中的声明。 开始将其分成几个部分:

int array[10][10];
array
是变量的名称,部分
[10]
表示它是一个包含10个int数组的数组,每个数组包含10个元素(第二个
[10]

现在:

array
是变量的名称,部分
[10]
表示它是一个由10个元素组成的数组,类型为
int*
整数指针,而不是以前的整数

第一种情况下的大小是10个整数数组大小的10倍=100个整数所需的空间

在第二种情况下,将是容纳10个指向整数的指针的大小

作为旁注,您的困惑可能来自这样一个事实:C允许以相同的方式访问这两个声明的元素。即,以下将获得第二个数组的第5个整数:

int b = array[2][5];
但是差异仍然很大,因为在第一个声明中,编译器将分配连续的空间来保存所有100个整数(按照C分配方法,将其组织为10个连续的10个整数数组),在第二种情况下,将只分配一个包含10个指针的数组,每个指针指向一个包含10个整数的数组的位置。并且10个数组将不会被分配,指针也不会初始化

在这种情况下,程序员负责分配10个int数组,并将每个int数组的地址分配给指针数组


需要澄清的另一点(感谢alk指出)是,在指针数组的情况下,第二维度是未定义的,这意味着每个
int
指针数组可以是1、10、1000或任何元素。

它只是
10
指针数组。更具体地说,“10代码> INT*<代码>数组。”我知道<代码> *数组有10个元素“实际上,<代码> *数组是指针而不是数组,所以它没有元素。也考虑<代码> int(*数组)[10 ] < /Cord>,这是一个指向10代码> int <代码> s的数组的指针,所以,
*array
是一个10
int
s的数组。啊,好吧,我想这就是我误解的地方。这个表达式:
int*array[10]
正在声明一个由10个指向整数的指针组成的数组。即指针数组。但是,这些指针尚未初始化。因此,我们需要添加代码,用一个整数的地址初始化这10个指针中的每一个。它只是一个
10
指针数组。更具体地说,是10的数组
int*
“I