今天的课程,讲了C语言里的重头戏之一:指针,开始学习C语言之前就对这指针略有耳闻,但都未进行了解,能让我在没开始学习的阶段就听到的词,让我一直期待着学习指针,现在有机会接触学习,可谓是如愿以偿,话不多说,接下来分享自己的学到的知识。
首先,提出两个问题:1、计算机中内存都是怎么编号的?2、计算机每个内存单元的空间有多大?抱着对这两个问题的疑问跟着流程进行下去;众所周知,计算机常用的操作系统有32位和64位,拿32位操作系统来说,每一位就有一根地址线,因此32位操作系统的计算机就有32根地址线,而这些地址线又都是物理线,物理线肯定得通电嘛,所以就有1(正电)/0(负电),每根地址线都有正电或负电的可能性,所以就把电信号转换成了数字信号,也就是二进制序列,32根地址线的它们的电信号转化成数字信号也就是32个二进制位,而将他们的所有的可能性罗列出来,足足有2^32种,而这些二进制序列都可以作为计算机内存的编号,这些编号又称为内存单元的地址,所以32位的计算机就有2^32个内存单元,开始C语言课程的第一天我们就大概了解了计算机的内存单位,最小的单位是bit(比特位),后面依次变大就是byte(字节),KB,MB,GB,TB,PB……如果一个内存单元的空间大小是一个bit,那假设存储一个字符(char)类型就要用8个内存单元,就一个字符就用八个空间来存储,想想也觉得太奇怪了,所以最终经过平衡决定了,计算机一个内存单元的空间大小为1byte,这样存储char类型的话就只需要1个内存单元就可以了,那么接下来就来归纳一下,32位系统有2^32个内存单元,1个内存单元的存储空间是1字节,那经过计算得出,2^32个内存单元的空间大小是4GB,上网查了一下,32位计算机的内存刚好就是4个G的,一直用着的计算机,听着他们说的4G、8G、16G的内存原来是这样计算得来的,又一个知识点get,好了,这样两个问题的答案就得到了。
那么接着往下的学习,计算机一个变量在内存中的地址是以怎样的形式进行呈现的呢?拿int整型定义一个变量a进行举例,将整型a定义为0,因为变量a定义的是整型,所以占用空间为四个字节,这四个字节每个字节都有一个地址,系统规定一个内存单元是一个字节,a变量就存储空间占用了四个内存单元,虽然给变量a每个字节都分配了一个地址,但当我们进行&a的操作的时候,拿到的就只是四个字节中第一个字节的地址;当定义变量a时存储的地址,也需要给个空间将这些地址存放起来,假设这个存放地址的空间命名为p,在C语言中p叫做指针变量,指针变量p定义的类型取决于里存放变量地址的那个变量的类型,将变量a的地址存放到指针变量p里,书写方式时int *p=&a;
指针变量的书写方式就是在变量名前面加个*,*p就是一个指针变量;因为遵守作息安排只能写到这里。文章中如果有描述错误的地方,还请指出,我会虚心的接受和学习。