为了方便理解地址,我们再来举一个小小的例子:
假设这是一家公司的办公楼,一共七层,每层有六个房间,那么外卖小哥想把外卖送到订外卖的人的手里便需要从第一层第一间房间可以找,直到找到他。这样就显得比较麻烦了。那要是外卖给每一层的房间标上房间号,订餐时标明房间号,是不是去就找到啦!!!
就像这样,603的顾客点餐了,外卖小哥可以直接送到603而不需要去一个一个找。这些个房间号就相当于地址,房间的格子就叫相当于存放的数据。怎么样,是不是容易理解了?
变量是创建内存中的(在内存中分配空间的),每个内存单元都有地址,所以变量也是有地址的。取出变量地址如下:
1. #include <stdio.h> 2. int main() 3. { 4. int num = 10; 5. #//取出num的地址 6. //注:这里num的4个字节,每个字节都有地址,取出的是第一个字节的地址(较小的地址) 7. printf("%p\n", &num);//打印地址,%p是以地址的形式打印 8. return 0; 9. }
我们可以看到10的地址就打印出来了。
给大家看一下详细的图示
这也就是说,在一个内存中,整型数字在内存中要4个字节来存储其地址。但是,对于地址如何去存储呢?这就用到了指针变量!
(好困,现在是凌晨1点)
如何定义指针变量?看下面咯
1. int num = 10; 2. int *p;//p为一个整形指针变量 3. p = #
这就是指针变量的定义方式,其中p是整型指针变量,它存放的是num的地址,而*p则表示的是num这个数值,*表示解引用,表示对地址中的值进行返回。下面列举一个指针的实例:
1. #include <stdio.h> 2. int main() 3. { 4. int num = 10; 5. int* p = # 6. *p = 20; 7. return 0; 8. }
以整型指针为例可以推广到其他类型:
1. #include <stdio.h> 2. int main() 3. { 4. char ch = 'w'; 5. char* pc = &ch; 6. *pc = 'q'; 7. printf("%c\n", ch); 8. return 0; 9. }
指针变量的大小
1. #include <stdio.h> 2. //指针变量的大小取决于地址的大小 3. //32位平台下地址是32个bit位(即4个字节) 4. //64位平台下地址是64个bit位(即8个字节) 5. int main() 6. { 7. printf("%d\n", sizeof(char *)); 8. printf("%d\n", sizeof(short *)); 9. printf("%d\n", sizeof(int *)); 10. printf("%d\n", sizeof(double *)); 11. return 0; 12. }
大小在32位系统下是4个字节,在64位系统下是8个字节,这里就演示了一下32位操作系统的,感兴趣的可以下去试一下64位的哦!
4、结构体
最后我们来说一下结构体!!!
也是很重要的哦
好好看
结构体是把单一类型组合到一起的做法。比如说对于一个人来说,他有姓名,年龄,性别,电话等等信息,我们要想把它们整合到一起就需要借助结构体的做法
结构体的定义我们需要用到一个关键字struct ,就像下面这个例子
1. struct People 2. { 3. char name[20];//名字 4. int age; //年龄 5. char sex[5]; //性别 6. char id[15]; //电话 7. };
我们在对结构体定义完后要进行初始化,那么怎么进行初始化呢?
请看这个程序:
1. #include<stdio.h> 2. int main() 3. { 4. 5. 6. struct People 7. { 8. char name[20];//名字 9. int age; //年龄 10. char sex[5]; //性别 11. char tele[15]; //电话 12. }; 13. 14. 15. //打印结构体信息 16. struct People p = { "张三", 20, "男", "15566688888" }; 17. //.为结构成员访问操作符 18. printf("name = %s age = %d sex = %s tele = %s\n", p.name, p.age, p.sex, p.tele); 19. //->操作符 20. struct People* ps = &p; 21. printf("name = %s age = %d sex = %s tele = %s\n", ps->name, ps->age, ps->sex, ps>tele); 22. 23. 24. return 0; 25. }
运行结果:
详细的解释注释里面有,如果感觉困惑可以评论区留言哦!看到了会第一时间回复呢!
1. //.为结构成员访问操作符 2. printf("name = %s age = %d sex = %s tele = %s\n", p.name, p.age, p.sex, p.tele); 3. //->操作符 4. struct People* ps = &p; 5. printf("name = %s age = %d sex = %s tele = %s\n", ps->name, ps->age, ps->sex, ps>tele);
在进行成员访问的时候切记不能调换顺序,一定要严格按照结构体定义里面的顺序进行访问,要不然编译器就会报错了!!!
好哒,今天的内容就说到这里了,希望大家多多支持,多多鼓励,多多关注噢!
下一次就是初阶C语言系列了,让我们再见吧!!!