- 前言
- 一、指针
- 1.内存
- 2.指针变量的大小
- 二、结构体
- 总结
前言
这一篇是初识c语言的最后两点,指针和结构体,也许学校的老师说指针难,但你要仔细去观看这篇的指针你会发现其实指针也还ok,给家人们增加信心的一篇,他并不难,快跟着我看看吧
提示:以下是本篇文章正文内容,下面案例可供参考
1.内存初识c语言我们的指针要明白几个点就可以了,后面会深入讲:
指针是怎么来的呢?
指针的本质是地址,地址是可以储存起来的,这个时候就有了指针变量(储存地址)
指针变量是怎么创建的呢?
指针变量前面的 * 指向的类型是什么?
指针有什么用?有一天我们拿到指针变量使用,就可以间接找到我们所指向的对象进行修改
带着这些疑问我们得先了解一下内存
内存是电脑上特别重要的存储器,计算机中程序的运行都是在内存中进行的。
所以为了有效的使用内存,就把内存划分成一个个小的内存单元,每个内存单元的大小是1个字节。为了能够有效的访问到内存的每个单元,就给内存单元进行了编号,这些编号被称为该内存单元的地址。
怎么去理解这段话呢?我们可以把内存想象成一个村,然后村里每一家是不是都有门牌号,这个门牌号就是地址,然后我告诉你我在代码村66号,这时你就有地址,代码村66号就是我的地址,你不就可以轻松找到我,如果你不知道我在代码村66号,你找我就得走遍代码村一个一个的找我,不是麻烦的要死。内存也是一样分成一个个内存单元,每一个单元都有着编号就是地址,我们有了地址方便我们访问,
看图:整个表格就是村(内存),每一个格子就是房子(内存单元),房子(内存单元)都编着门牌号(地址),每一个单元的大小是一个字节,这样你有了地址不就能快速找到我,
这边为什么啥单元的大小是一个字节bype,而不是其他单位,比如比特bit呢?
先补充2个知识点
(1)计算机单位以及换算:
(2)电脑的地址线:
我们电脑一般分为为64位 *** 作系统和32位,看过电脑设置的关于应该都知道自己电脑是几位的吧,这边我们讲32位,电脑32位要去访问我们空间就得有地址,所以有电脑32位就有32根地址线,每一根地址线都通电产生电信号,电信号有 1 / 0 的选择,每一根地址线都通电,就有2的32次方个地址,看图左,第一个地址编号为32个0组成的二进制数,往后的都是二进制数组成的地址编号,那我们32位就有了2的32次方个地址,地址的单位是字节,我们要想知道内存是几个GB就可以把二进制转换为10进制数然后进行换算 。二进制转换成10进制等于 4 294 967 296,然后进行换算最终等于4g ,看图右:
补充:
所谓的二进制就是 0 1 所组成的数
八进制就是0 1 2 3 4 5 6 7 所组成的数
十进制就是0 1 2 3 4 5 6 7 8 9 所组成的数
十六进制 0 1 2 3 4 5 6 7 8 9 a b c d e f ,字母 a~f 代表10到15,所组成的数
回归正题:我们要是每一个比特占一个内存单元的话,char类型就有1个字节
,一个字节等于8个比特位,就占8个内存单元是不是太浪费了,好比如你给我送外卖,你送到我家就行,你还要送到我家第3块瓷砖,是不是没必要。
介绍了内存的这么多,我们来看储存的数据所占的地址是什么:
从vs编译器的监控和内存中可以看到变量 a 所创建的地址 0x006ffc14,这边0x是十六进制的意思,内存中有多个创建的地址我们取第一个也就是最小的一个,上面不是说以2进制储存吗为什么内存中的数据是 0a 00 00 00,因为我们用十六进制显示数据更加简洁,不然二进制的10就是0000 0000 0000 0000 0000 0000 0000 1010 太长了,注意16进制表示10是 00 00 00 0a,而编译器中的内存中的数据要倒着看。
知道了地址那我们怎么打印地址呢?只需要输出的时候加上打印地址的输出格式 %p,
为什么跟上面监控下的地址不一样呢?
注意:每一次程序运行都会重新创建地址,以16进制显示
那我们怎么去存这个地址,存地址能干什么?存地址是方便以后找到地址存放的对象进行修改:
(1)储存地址(记住你的地址,方便以后找到):
>注意:我们指针指向的类型是地址所储存的数据类型,如果地址中的数据是char类型的,下面用指针变量储存也得是char类型,改一下我们就明白了
再多说一嘴:内存中储存的数据类型是什么下面指针变量的类型就是什么
(2)找地址,对找到的地址,进行地址里面的数据修改
这边刚好讲到初识c语言3中单目 *** 作符落掉的两个,&取地址 , * 解引用 ,他两是一对一个取地址a,找地址a 一来一回
补充1:指针变量也是变量所以也分全局变量和局部变量
补充2:写指针变量有两种写法
第一种: * 号靠近类型
int* p1,p2,p3//这种写法只表示p1是指针变量,p2,p3不是
因为 * 贴近p1,而p2和p3前面没有贴近的 * 解引用 *** 作符,所以不是指针变量,要使他们都是指针变量,每一个变量都得加 * 这个 *** 作符
第二种: * 号靠近变量
int *p1,*p2,*p3//这种写法就都是指针变量而且更好理解
总结:不管是第一种还是第二种我们在要表示一个变量是指针变量时,都要在变量前面加上 * 解引用 *** 作符
2.指针变量的大小
我们用vs程序运行来检验一下
(1)32位的情况:
(2)64位的情况
结构体是C语言中特别重要的知识点,结构体使得C语言有能力描述复杂类型。比如描述学生,学生包含:名字+年龄+性别+学号这几项信息
再比如描述书,书:书名+作者+出版社+定价+书号这几项信息,我们称这种叫复杂对象,这里只能使用结构体来描述
C语言就给了自定义类型的能力
自定义类型中有一种叫:结构体 ,关键字是 struct
结构体是把一些单一类型组合在一起的做法
比如我要描述一个学生这个复杂对象,他名字叫橙粒,年龄19,性别男,电话号码是 17273356688 ,结构体代码有2类写法
1.得到结构体对象的写法
2.得到是指针(地址)的写法
总结:结构体这边我们又补了 . 和-> 结构体成员 *** 作符的作用,我个人认为结构体第二种比较麻烦,建议如果单纯打印的话用第一种就行
总结
讲完指针和结构体我们初识c语言这一篇就过去啦,初识c语言我们了解的大概有14大点;
1.什么是c语言;2.第一个c语言;3.数据类型,4.变量,常量;5.字符串、转义字符、注释,6.选择语句;7.循环语句;8.函数;9.数组;10. *** 作符,11.关键字;12define定义的常变量和宏;13.指针;14.结构体,希望我的分享你我都有收获,在这边分享这些我很开心,因为认识一群跟我一样的人,一样的有梦想,一样卷哈哈哈哈,希望我能坚持下去。
如果还更初识这一块的话我打算拿一下比较容易错的题目与大家交流,练习算是强化一下这一块,码了一星期的初识c语言希望家人们点个赞也算对我的一种鼓励,谢谢!!!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)