gpt4 book ai didi

c - C中二维数组的名称

转载 作者:太空狗 更新时间:2023-10-29 15:48:20 25 4
gpt4 key购买 nike

我正在学习 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com