06.23 C语言中一切都是地址

C语言中一切都是地址

c语言中的数据和代码是需要存放才可以使用的,C语言用变量来存储数据,用函数来定义一段可以重复使用的代码,它们最终都要放到内存中才能供 CPU 使用。

数据和代码都以二进制的形式存储在内存中,计算机无法从格式上区分某块内存到底存储的是数据还是代码。当程序被加载到内存后,操作系统会给不同的内存块指定不同的权限,拥有读取和执行权限的内存块就是代码,而拥有读取和写入权限(也可能只有读取权限)的内存块就是数据。

CPU 访问内存时需要的是地址,而不是变量名和函数名!变量名和函数名只是地址的一种助记符,当源文件被编译和链接成可执行程序后,它们都会被替换成地址。编译和链接过程的一项重要任务就是找到这些名称所对应的地址。

然而指针也是一种变量,他里面装的就是所指数据或者代码的地址。所以它可以指变量,也可以指函数。

C语言中一切都是地址

C语言中一切都是地址

下面的代码演示了如何输出一个地址:

#include <stdio.h>
int main(){
int a = 100;
char str[20] = "c.biancheng.net";
printf("%#X, %#X\\n", &a, str);
return 0;
}
/<stdio.h>

运行结果:

0X28FF3C, 0X28FF10

%#X表示以十六进制形式输出,并附带前缀0X。a 是一个变量,用来存放整数,需要在前面加&来获得它的地址;str 本身就表示字符串的首地址,不需要加&。

到这里文章就结束了,如果有想要学习C语言呢,或者再学习C语言的可以,私聊我发送“C语言” 虽然c语言简单,但是一些更加重要的知识是教科书上没有的。需要学习者自己尝试。所以有对于学习者来说,有个好的交流环境,学习资料是特别重要的。我会给大家提供一些帮助、建议,但也希望大家多去实践自己获取学习到的知识。

如果觉得我文章还可以的可以关注,转发,收藏,评论,谢谢大家。


分享到:


相關文章: