c - 递增时的双指针给出不同的地址
问题描述
昨天我在搞乱双指针,这种行为是意料之中的:
int main(){
char arr[2][10] = {"Burger", "Pizza"};
char **ptr = (char**) arr;
printf("%p %p\n", arr, ptr); // first printf
printf("%p %p\n", arr+1, ptr+1); // second
printf("%p %p\n", arr[0], *ptr); // third
puts(ptr);
puts(ptr+1);
}
在这个例子中,我假设,arr
并且ptr
指向同一个地址,并且这个假设在第一个 printf 中被证实是正确的:
0x7fffe4fd5010 0x7fffe4fd5010
其次,我假设 ,arr+1
和ptr+1
, 也都指向同一个地址,但是当我尝试运行它时,输出不是:
0x7fffe4fd501a 0x7fffe4fd5018
这怎么可能?C 编程语言有什么我缺少的吗?
解决方案
推荐阅读
- java - java - 如何在一次迭代中从java中的数组中删除多个元素?
- vim - 如何在 VS Code 中跳转到文件资源管理器?
- javascript - AttributeError 问题:“WebDriver”对象没有“管理”属性
- mysql - 将 50GB 数据导入 MySQL 哪个更快?数据库源或shell命令读取文件?
- javascript - 我想根据薪水使用 if 条件修改数组
- reactjs - 获取远程图像并将其转换为 gatsby 图像
- python - 使用具有一定大小的较小矩阵和 numpy 数组循环遍历 nxn 矩阵
- list - 从列表的所有元素中的字符串中删除字符
- json - 使用 Swift4 解析 json 时出错,无法打印
- java - 如何在 Eclipse 中从参考库中导入类?