c - 为什么输出 *(arr + k) != *(&arr + k) 尽管两者都引用了相同的地址
问题描述
我正在尝试打印数组的内容。请找到代码。
int main(){
int k = 2;
int arr[5] = {8,7,5,11,2};
printf("arr %p\n", arr);
printf("&arr %p\n", &arr);
printf("*(arr + k) %p\n", *(arr + k));
printf("*(&arr + k) %p\n", *(&arr+k));
}
我得到低于上述程序的输出,其中 arr + k 和 &arr + k 必须相同。
arr 0x7ffe4e76ab60
&arr 0x7ffe4e76ab60
*(arr + k) 0x5
*(&arr + k) 0x7ffe4e76ab88
解决方案
arr + k
并且&arr + k
必须相同
他们不一样。
在arr + k
中,前进k
步骤(每个步骤的大小等于)并产生与衰减( )sizeof *arr
类型相同的值。arr
int*
在&arr + k
中,前进k
步骤(每个步骤的大小等于)并产生与( )sizeof arr
类型相同的值。&arr
int(*)[5]
2个表达式的步长不同。首先是每个元素的大小;其次是整个数组的大小。
推荐阅读
- python-3.x - 如何计算多维列表中的重复项
- xml - 从具有相似块的 XML 文件中提取数据
- python - 在底图中部分填充 shapefile 多边形
- c# - 如何在代码后面和不可见时为数据网格单元格着色
- python - 根据扩展名python将文件夹中的文件分开
- python - 机器人测试用例将格式化变量从 python 传递到机器人文件
- android - 单个 Activity 不会为工具栏膨胀菜单
- python - 使用 pyodbc 连接到本地 SQLite DB
- javascript - 如何使用 React 从 Fantasy Premier League 中检索授权信息
- android - 在 Android 中未调用 onActivityResult