做电影网站有哪些,小程序开发一键生成平台源码,如何做国外网站的镜像,品牌网站建设的要点Hi~#xff01;这里是奋斗的小羊#xff0c;很荣幸各位能阅读我的文章#xff0c;诚请评论指点#xff0c;关注收藏#xff0c;欢迎欢迎~~ #x1f4a5;个人主页#xff1a;小羊在奋斗 #x1f4a5;所属专栏#xff1a;C语言 本系列文章为个人学习笔记#x… Hi~这里是奋斗的小羊很荣幸各位能阅读我的文章诚请评论指点关注收藏欢迎欢迎~~ 个人主页小羊在奋斗 所属专栏C语言 本系列文章为个人学习笔记在这里撰写成文一为巩固知识二为同样是初学者的学友展示一些我的学习过程及心得。文笔、排版拙劣望见谅。 1、内存和地址 1.1内存 1.2编址 2、指针变量和地址 2.1取地址操作符和指针变量 2.2解引用操作符 “ * ” 2.3指针变量的大小
1、内存和地址 1.1内存 理解内存和地址我们可以把它们类比为宿舍楼和房间编号。宿舍楼有大有小大一点的宿舍楼较小一点的宿舍楼可以居住更多的学生同样的计算机的内存也是有大有小我们常见的有8G、16G、32G等更大的内存能存储更多的信息。 宿舍楼的编号是为了更方便的管理学生为学生提供便利同样的为了更高效的管理内存内存也被划分为一个个小的内存单元每个内存单元的大小是一个字节一个字节中有8个比特位。 这里需要注意一点单一个比特位是没有地址的只有一个内存单元才有一个地址这就像我们在学校住宿舍学校基本不可能给我们一人一个宿舍而是4人或6人寝。 所以每个内存单元就类似于学生宿舍一个 “字节宿舍” 里能住 “8个比特同学” 。宿舍有门牌号内存单元也有 “门牌号”就是内存地址编号有了这个内存单元的编号CPU就能快速的找到这个内存空间对其相应的操作。 生活中门牌号叫地址在计算机中内存单元的编号也叫地址。在C语言中还给地址起了一个新的名字叫做指针。可以粗略的认为地址就是指针指针就是地址。 1.2编址 CPU访问某个内存单元先要知道其地址因为内存空间很大所以需要给内存单元编址。编址并不是把每个字节的地址记录下来而是通过硬件来实现就像琴键上并没有标上这个键是什么音但是学过钢琴的人却能弹奏曲子这是因为制造这架钢琴前其界内就约定了每个键该是什么音计算机编址也是如此。 我们可以简单地理解32位机器有32根地址总线每根线有两个形态0或1电脉冲的有无一根线能表示两种信息那么32根线就能表示2的32次方种信息这个数还是非常大的。地址信息被下达给内存CPU在内存上就能找到该地址对应的数据将数据通过数据总线传给CPU内的寄存器。 计算机中并没有魔法其内有很多的硬件单元硬件单元之间协同工作要想协同就要进行数据传递。但硬件与硬件之间是相互独立的怎么通信呢答案很简单就是用线连起来。而CPU和内存之间也是要交互数据的两者也要用线连起来。本节只关心地址总线。
2、指针变量和地址 2.1取地址操作符和指针变量 如上创建变量实质上是向内存申请一块内存空间上面我们申请了4个字节的空间来存20这个值。可以看到右边0x010FF9B0~0x010FF9B3就是我们申请到的4个字节的地址每个字节都有地址存放了14 00 00 0016进制这个值10进制为20。 看了上面的内容这里有一个提问变量 “a” 对于上面代码的执行有什么作用其实仔细想想好像也没有什么作用。变量的名字仅仅是给程序员看的编译器不看名字编译器是通过地址找内存单元的。 我们给变量a申请了4个字节的内存空间通过取地址操作符 “” 我们可以拿到地址值。但是a占4个字节的空间地址有4个 “” 操作符拿到的是4个还是其中的一个呢 可以看到“” 操作符只取到了最小的一个地址不过当我们拿到这个 “头” 的时候就能顺藤摸瓜找到其他地址。 值得一说的是当 “” 是单目操作符的时候它是取地址操作符当 “” 是双目操作符的时候它是按位与操作符。 当我们拿到变量a的地址后如果我们想把变量a的地址存起来就需要再创建一个变量而用来存放地址的变量就叫指针变量。 既然是变量就要有一个类型来创建指针变量的类型取决于它所指对象的类型。 这里定义了一个整型的指针变量 “pa”注意是 “pa” 而不是 “ *pa ”指针变量 “pa” 是用来存放地址的。 pa是指针变量的名字而int *是pa的类型。* 表示pa是指针变量int表示pa指向的对象的类型为int。* 靠近int还是靠近pa是无所谓的但是建议靠近pa具体原因在后面的文章中会有解释。 上面为指针变量pa与整型变量a比较。 还有一点需要注意当我们写出 int *p 100这样的表达式的时候就把100也看作了一个地址。p作为一个指针变量在它眼里给它的值都是地址。 2.2解引用操作符“ * ” 当 “ * ” 是单目操作符的时候它是解引用操作符也叫间接访问操作符当 “ * ” 是双目操作符的时候它是乘法操作符。 将变量a的地址存到指针变量pa中可以在某些时候通过pa来找到a或者间接的操作a。这就像我们的朋友告诉了我们他的宿舍门牌号我们记下来后想去找他的时候就可以快速地找到他。那该怎么找a呢用解引用操作符 “ * ” *pa就相当于a。 我们用*pa间接的改变了a的值。 那这么做的意义是什么呢想改变a的值我们直接改不就可以了为什么还要用*pa来间接的改呢 这么做的意义其实是很大的。打个比方一个杀手在常年的任务中越来越厉害他就成立了一个杀手组织做了老大他作为老大是很重要的人物那这个时候一些任务他就不方便亲自出手了交给手下就可以完成任务。指针在上面代码中的意义也是如此使得代码更加灵活。 作为C语言的灵魂指针是C语言中功能最强大的机制在后续的学习中就会慢慢地理解其中的含义。 2.3指针变量的大小 在探讨指针变量的大小前我们应该先搞清楚指针变量是干什么的。指针变量是为了存放地址而创建的一个变量那么指针变量的大小有多大是不是就取决于这个地址有多大。 在32位机器中有32根地址线32根地址线有32个0或1的数字信号把这32根地址线产生的2进制序列当作一个地址那么一个地址就要32个比特位也就是4个字节。所以指针变量的大小就应该是4个字节。同样的道理在64位机器中指针变量的大小就应该是8个字节。 有没有注意到我在描述指针变量大小的时候并没有明确说明指针变量的类型而是总体的说指针变量的大小。实际上指针变量的大小与指针的类型没有关系。地址是由地址总线传过来的而地址总线的数量是确定的32根地址总线或64根地址总线对应4个字节和8个字节的大小不管是整型变量的地址还是字符型变量的地址都是地址所以大小是一样的。 还有一点前面说了 “” 操作符取到的只是首地址最小的地址所以不管地址是1个字节还是4个字节还是8个字节只要取出首地址就可以了。 关于指针变量的大小和不同类型变量所占空间大小我们可以抽象地想象为一个固定大小的盒子装不同大小的小盒子大小就那么大不用白不用嘛。 如果觉得我的文章还不错请点赞、收藏 关注支持一下我会持续更新更好的文章。 点击跳转下一节— C语言指针2