c - 取消引用指向从数组指针转换的指针的指针
问题描述
学习 C 这让我很困惑:
#include <stdio.h>
int main(){
int m[5][5];
int count = 0;
for(int i = 0; i < 5; i++){
for(int j = 0; j < 5; j++){
m[i][j] = count++;
}
}
int **p = m;
int (*k)[5] = m;
printf("%p\t%p\t%p", *p, *k, *m);
return 0;
}
这就是已打印的内容:
0x100000000 0x7ffff1fc9d70 0x7ffff1fc9d70
我真的很困惑为什么取消引用 *p 是0x100000000
,不是0x7ffff1fc9d70
吗?
解决方案
你认为那m
是类型int **
,对吧?
它不是。如果你这样做了,那将是:
int *m[5];
这会产生一个由五个指向 int 的指针组成的数组,因此m
将是指向 int 的指针的指针。
但是,如果您这样做:
int m[5][5];
你有足够的空间容纳 25 个整数,编译器将作为 5x5 二维数组访问它们。p
指向该数组的开头。取消引用它,编译器读取该数组的开头并将其解释为指向 int 的指针。改变你填写的数字,你会得到不同的伪指针。
推荐阅读
- asp.net-mvc - 在 Razor 页面路由中组合可选的处理程序和参数
- google-apps-script - 如何使用脚本编辑器替换谷歌表格中的文本
- python - 在 python 中调用带有线程守护进程的程序
- python - Windows 10 中的 TensorFlow 2.0 构建失败
- javascript - 在不知道计数的情况下从分页 API 调用中获取数据
- ios - charles 4.5.4 显示 304 (Not Modified) 状态码
- c - 如何验证一个数字在 C 中是 int 的?
- python - 有没有办法在 Gtk 窗口/小部件中停用鼠标光标?
- reactjs - 如何为 React 组件使用声明文件?
- javascript - 在 TypeError (Null) 之后 JavaScript 会停止工作吗?