我正在学习 C 中的指针和数组,这是一个让我困惑了一段时间的问题:
因此,一维 int 数组的名称是指向 int 的常量指针,它指向该数组中的第一个元素。因此,当我们评估一维数组的名称时,我们应该获取数组中第一个元素的地址。
对于二维int数组,数组名是指向int第一个数组的指针。那么 2D int 数组名称的值是多少?我想应该是这个二维数组中第一个数组的地址。但是C中数组的地址是怎么定义的呢?它只是该数组中第一个元素的地址吗?
最佳答案
So the name of a 1D int array is a constant pointer to int
这是错误的,而且经常被教坏。数组就是数组。下面是一些类比的代码:
int x = 5;
double d = x + 1.2;
在第二行中,x
被转换为 double
用于加法。这不会改变x
,它仍然是一个int
,转换的结果是“暂时的”,只存在于加法完成之前。 +
运算符的条件要求进行转换,即两个算术操作数必须转换为通用类型(在本例中为 double
)。
在数组的情况下,假设我们有 char *p = arrayname + 1
,那么 arrayname
仍然是一个数组。但它被转换为一个临时指针,以便可以进行加法(+
运算符需要这个,它可以添加一个指针和一个整数)。临时指针指向数组的第一个元素,但是说临时指针就是数组是不正确的。
大多数运算符都会调用数组到临时指针的这种转换,但有些运算符不会。所以说 arrayname
是一个指针是不正确的,因为它可能与不将数组转换为指针的运算符一起使用,例如数组名的大小
。
将数组转换为指针的结果是指向该数组第一个元素的指针。即使第一个元素本身就是一个数组,这也总是正确的。
But how is the address of an array defined in C? Is it just the address of the first element in that array?
没有。每个变量都有一个地址,这适用于数组和非数组。如果您了解 int
的地址,那么您也就了解了 char
的 2x2 数组的地址。
关于c - C中二维数组的名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54859119/