目录
1.内存和地址
1.1内存
在讲内存和地址之前,我们想有个生活中的案例:
假设有一栋宿舍楼,把你放在楼里,楼上有100个房间,但是房间没有编号,你的一个朋友来找你玩,如果想找到你,就得挨个房子去找,这样效率很低,但是我们如果根据楼层和楼层的房间的情况,给每个房间编上号,如:
生活中,每个房间有了房间号,就能提高效率,能快速的找到房间。
如果把上面的例子对照到计算中,又是怎么样呢?
计算机中常见的单位(补充)︰
一个比特位可以存储一个2进制的位1或者0
1.2如何理解编址
2.指针变量和地址
2.1取地址操作符(&)
我们在这里学习取地址操作符&
#include<stdio.h>
int main()
{
int a = 10;
&a;//取出a的地址
printf("%p\n", &a);
return 0;
}
按照我画图的例子,会打印处理:006FFD70,&a取出的是a所占4个字节中地址较小的字节的地址。虽然整型变量占用4个字节,我们只要知道了第一个字节地址,顺藤摸瓜访问到4个字节的数据也是可行的。
2.2指针变量和解引用操作符(*)
2.2.1指针变量
#include<stdio.h>
int main()
{
int a = 10;
int* pa = &a;//将取出的地址存放在p中
return 0;
}
2.2.2拆解指针类型
我们看到pa的类型是int*,我们该如何理解指针的类型呢?
那如果有一个char类型的变量ch,ch的地址,要放在什么类型的指针变量中呢?
//pa的类型应写为
char *pa = &ch
2.2.3解引用操作符
我们将地址保存起来,未来是要使用的,那怎么使用呢?
在现实生活中,我们使用地址要找到一个房间,在房间里可以拿去或者存放物品。
C语言中其实也是一样的,我们只要拿到了地址(指针),就可以通过地址(指针)找到地址
(指针)
指向的对象,这里必须学习一个操作符叫解引用操作符(*)。
#include<stdio.h>
int main()
{
int a = 10;
int *pa = &a;//将取出的地址存放在p中
*pa = 0;
return 0;
}
2.3指针变量大小
#include<stdio.h>
int main()
{
//指针变量的大小取决于地址的大小
//32位平台下地址是32个bit位(即4个字节)
//64位平台下地址是64个bt位(即8个字节)
printf("%zd\n", sizeof(char*));
printf("%zd\n", sizeof(short*));
printf("%zd\n", sizeof(int*));
printf("%zd\n", sizeof(double*));
return 0;
}
以上便是我为大家带来的指针详解(一)的内容,若有不足,望各位大佬在评论区指出,谢谢大家!可以留下你们点赞、收藏和关注,这是对我极大的鼓励,我也会更加努力创作更优质的作品。再次感谢大家!