对于地址我们以前接触过像scanf("%d",&a);其中的&a表示的就是a变量的内存地址。
淘宝公司 杭州市文二路391号
百度公司 北京市海淀区上地十街10号
新浪公司 北京市北四环西路58号
类似上面的,我们起的变量名就相当于公司名称,而变量的内存地址就相当于街道门牌号
我们要想查看变量的内存地址可以用printf函数来输出,输出地址用p%来表示。
#include<stdio.h>
main()
{
int a=10;
int b=20;
int c=12;
printf("%p ",&a);
printf("%p ",&b);
printf("%p ",&c);
}
上面的程序在被电脑执行时会在内存里开辟出3个存储空间用来存储3个整数,这三个存储空间的地址编号是用16进制数来表示的由电脑自动创建。0240ff24、0240ff20、0240ff1c分别是变量a,b,c的内存地址,如下图。
实际上电脑无论是取出内存空间里的数据还是给内存空间里的数据赋值都是通过地址编号来找到相应的内存空间的。如果我在上面的例子中添加一行代码a=15;那这行代码被执行时电脑其实是找到编号为0240ff24所在的那块内存并把数据15存储到里面。
变量名a,b,c只是我在编写c语言代码时使用的,而我的代码被电脑执行时电脑只是使用内存地址。
我们定义好变量后,也是可以使用变量的内存地址的。&a代表变量a的内存地址,*&a表示这个地址里的数据。
#include<stdio.h>
main()
{
int a=10;
printf("变量a的内存地址为%p\n",&a);
printf("地址%p里存储的数据为%d\n",&a,*&a);
*&a=12;
printf("地址%p里存储的数据为%d\n",&a,*&a);
}
上面的例子用来演示使用地址来找数据,我们平时当然不这样写而是只用变量名就可以了,但在c语言里地址的使用却是我们必须学会的,因为c语言支持直接操作内存。明白了地址是什么后也为我们学习指针打下了基础。