c - C中二维数组的名称
问题描述
我正在学习 C 中的指针和数组,这是一个让我困惑了一段时间的问题:
因此,一维 int 数组的名称是一个指向int的常量指针,它指向该数组中的第一个元素。因此,当我们评估一维数组的名称时,我们应该得到数组中第一个元素的地址。
对于 2D int 数组,数组名称是指向int的第一个数组的指针。那么 2D int 数组名称的值是多少?我认为它应该是这个二维数组中第一个数组的地址。但是 C 中如何定义数组的地址呢?它只是该数组中第一个元素的地址吗?
解决方案
所以一维 int 数组的名称是一个指向 int 的常量指针
这是错误的,而且经常被教导得很糟糕。数组就是数组。这是一些类比的代码:
int x = 5;
double d = x + 1.2;
在第二行x
中转换为 double
用于加法。这不会改变x
,它仍然是int
,转换的结果是“临时的”,并且只存在直到添加完成。转换是由+
运算符的条件要求的,即两个算术操作数必须被带到一个公共类型(double
在这种情况下)。
在数组的情况下,假设我们有char *p = arrayname + 1
, thenarrayname
仍然是一个数组。但是它被转换为一个临时指针,以便可以进行加法(+
运算符需要这个,它可以添加一个指针和一个整数)。临时指针指向数组的第一个元素,但是说临时指针是数组是不正确的。
大多数运算符都会调用数组到临时指针的这种转换,但有些则不会。所以说它是arrayname
指针是不正确的,因为它可能与不将数组转换为指针的运算符一起使用,例如sizeof arrayname
.
将数组转换为指针的结果是指向该数组第一个元素的指针。即使第一个元素本身就是一个数组,这始终是正确的。
但是 C 中如何定义数组的地址呢?它只是该数组中第一个元素的地址吗?
不,每个变量都有一个地址,这适用于数组和非数组。如果您了解 an 的地址,int
那么您也了解 2x2 数组的地址char
。
推荐阅读
- c - 格式字符串末尾带有 %s 的 snprintf 的行为
- batch-file - 如何在命令提示符中无限运行批处理文件
- python - 在 discord.py 中添加和响应响应
- javascript - eCharts 工具提示打字稿
- android - Android反向动画不尊重持续时间
- java - 调用 get 方法时,hashmap 中的更新键返回 null
- ios - CocoaPods 找不到 pod“boost-for-react-native”的兼容版本
- r - 打印参数的值,包括它的类型
- flutter - 使用 Flutter 获取设备货币
- r - 使用 get() 函数合并数据集