arrays - 指向一维数组还是二维数组的指针变量?
问题描述
我有以下代码用于一维数组:
#include <stdio.h>
int main()
{
static int b[4] = {11, 12, 13, 14};
int (*p)[4];
p = b;
printf("%d \n", *(p + 1));
return 0;
}
即使我认为“b(数组名)”是指向一维数组的指针,我还是得到了一个编译错误
'=': cannot convert from 'int [4]' to 'int (*)[4]'
但是,如果我将 b 数组更改为二维数组“a(数组名称)”,则一切正常。这是否意味着,在“int (*p)[4];”的使用中,“*p”必须表示 a[],如下所示:
static int a[3][4] = { {1, 2, 3, 4}, {5, 6, 7, 8}, {9, 10, 11, 12} };
int (*p)[4];
p = a;
因此,“int (*p)[4]”只提供了二维数组行数的灵活性。
对这个问题有任何见解吗?
解决方案
数组自然衰减为指向其第一个元素的指针,具体取决于上下文。也就是说,当这种衰减发生时,plainb
与 相同&b[0]
,具有 类型int *
。由于p
and b
(or &b[0]
) 的类型不同,您会收到错误消息。
至于a
这里也是一样的,它衰减为指向它的第一个元素的指针,即a
与&a[0]
. 但是因为a[0]
是一个4
元素数组, then&a[0]
是一个指向四个元素数组的指针,或者int (*)[4]
. 这也是p
第二个示例中的类型。
推荐阅读
- c++ - 数据未插入 MySQL 数据库
- excel-formula - 如果 Excel 中的嵌套函数
- javascript - 将 react-helmet 添加到我的 Gatsby 项目中会导致错误:元素类型无效
- asp.net-mvc - IIS URL 重写不起作用,甚至没有捕获输入 URL?
- reactjs - Reactjs 渲染组件而不导入导航栏和样式
- ios - 是否可以仅允许基于 iOS 13 上的视图控制器的特定方向?
- mysql - 根据 gorm 中设置的 if 条件更新记录
- python - 通过获取假人问题进行的一次热编码
- python - 当值为`list`时`pandas.Series.str`如何工作?
- javascript - 如何在 Jest 中模拟文档并找到元标记?