c - 指向数组的指针之间的区别
问题描述
这两个指针有什么区别?两个指针都指向一个数组?是不是因为第一个指针是指向数组第一个元素的指针,而另一个是指向 5 个元素的数组的指针?这对代码有什么影响?
int arr[5] = {1,2,3,4,5};
int *pointer = arr;
int (*pointer2)[5] = arr;
解决方案
你的第一个声明
int *pointer = arr;
声明pointer
为指向单个整数的指针。在初始化中,arr
衰减为指向它的第一个元素的指针,所以它相当于
int *pointer = &arr[0];
第二个
int (*pointer2)[5] = arr;
声明pointer
为指向 5 个整数数组的指针。初始化无效,因为arr
衰减到指向单个整数的指针,而不是数组。您需要添加演员表:
int (*pointer2)[5] = (int(*)[5])arr;
或获取数组的地址(因为在获取数组的地址时不会发生指针衰减):
int (*pointer)[5] = &arr;
当您执行指针运算时,两种指针类型之间的差异会变得很明显,因为指针运算是以它所指向的类型的大小为增量执行的。pointer+1
是指向 的指针arr[1]
,但pointer2[1]
将是指向 的指针arr[5]
,它不存在。
推荐阅读
- json - 检查字符串的存在,然后从 JSON 中复制值
- python - 如何在同一个文件夹中多次保存不同名称的.doc文件
- python-3.x - AttributeError:“LineString”对象没有属性“编码”
- elasticsearch - 如何通过使用 id 数组从 Index 获取数据,文档应该以数组中提供的相同顺序获取。使用弹性搜索 7.1 3
- c++ - 如何使用自定义内存管理器定义 RAII 缓冲区类?
- android - 当应用程序强制在本机反应中关闭时,本地数据库被清除
- spring-boot - “在 us-east-1 区域初始化 Eureka”是什么意思?
- c++ - range-v3 join 函数将两个容器连接在一起
- postman - 在邮递员中获得当前 api 的响应后,如何运行另一个 api
- python - Pandas:根据相似的列和(列)列表元素分配组 ID