C语言之指针
2021-06-07 06:05
标签:cpu null 数组的指针 部分 turn 链接 区域 代码 变量 CPU 只能通过地址来取得内存中的代码和数据,程序在执行过程中会告知 CPU 要执行的代码以及要读写的数据的地址。如果程序不小心出错,或者开发者有意为之,在 CPU 要写入数据时给它一个代码区域的地址,就会发生内存访问错误。这种内存访问错误会被硬件和操作系统拦截,强制程序崩溃,程序员没有挽救的机会。 CPU 访问内存时需要的是地址,而不是变量名和函数名!变量名和函数名只是地址的一种助记符,当源文件被编译和链接成可执行程序后,它们都会被替换成地址。编译和链接过程的一项重要任务就是找到这些名称所对应的地址。 指针的长度由地址总线决定,也就是说CPU的寻址能力。 可以看到int (*p)[2] = arr2;(数组名弱化成指针,即数组首地址)两者是一致的 C语言之指针 标签:cpu null 数组的指针 部分 turn 链接 区域 代码 变量 原文地址:https://www.cnblogs.com/ming-fei/p/14589438.html没有内存就没有指针
不要说是字长,字长是根据数据总线决定的。有的机器数据总线和地址总线不一定都是一样的
像现在64位机器中很对地址总线都是32位的指针运算符 * (常和去地址操作符&一起出现)
数组指针,和指针数组
#include
int main(void) {
int arr2[2][2] = {{1,2},{3,4}};
printf("%x\n",arr2);
int arr1[2] = {1,2};
int (p)[2] = arr2;
printf("%x\n",p);
printf("%d\n",p[0]);
printf("%d",*(++p)[0]);
return 0;
}
输出结果
1908fec0
1908fec0
1
3
p[0]即是数组第一列首地址首个元素arr2[0][0]的地址,取值就是1
p++指向arr2[1],即是数组第二列首地址首个元素arr2[1][0]的地址,取值就是3void*和NULL
上一篇:c++之一个方便的日志库
下一篇:C++ STL deque