个人主页: @太阳哥哥
本文收录专栏: C语言学习之路
其他专栏: ARM学习之路
学习格言:路漫漫其修远兮,吾将上下而求索
欢迎点赞、关注、收藏( •̀ ω •́ )✧ 一起努力,一起学习!
目录
1、地址
1.1、什么叫地址?
1.2、数据单位
1.3、大小端存储方式
2、指针与变量
2.1、什么叫指针?
2.2、指针变量
2.3、指针变量初始化
2.5、指针运算
地址就是在存储空间中,为了区别存储的内容,在存储空间上给上一个特殊的编号
程序在执行时,会需要使用内存空间,操作系统根据地址找到各个程序内容
内存空间:通过内存地址来表示对应的空间
内存大小:每个地址表示8bit(1字节)空间,最小的数据单位为位(bit)
1B(字节) = 8bit(位)
1kB(千字节) = 2^10B ==1024B
1MB(兆字节) = 2^10KB == 2^20B
1GB = 2^10MB
1TB = 2^10GB
1PB = 2^10TB
计算机存储数据时,如果数据占用多个字节,需要使用多个地址
存储采用数据低位(低字节数据)存储到低地址,叫做小端存储,数据低位(低字节数据)存储到高地址,叫做大端存储
小端存储图
1.4、变量地址
系统给变量分配内存单元的起始地址,叫做变量地址
使用格式:& 变量名
下图中有两个变量,其所在地址分别为0x1c、0xff
int a = 10;
//a变量的地址:0x1c,占用4个字节
char b = ‘a’;
//b变量的地址:0xff,占用1个字节
在计算机中,所有数据都存在内存单元(空间)中,每个内存单元都有一个地址,只要通过地址就可以找到内存单元,就可以找到内存单元数据。
由于通过内存地址就能找到对应的内存单元数据内容,就说内存地址指向该变量数据(内存空间),我们就把这种描述叫做指针。指针就是地址指向内存空间,其实就是地址。
指针:内存空间的地址,地址指向这个内存空间(变量数据)
在C语言中,允许定义变量来存储其他变量的地址,这种专门用来存储其他变量的地址 的变量,就叫做指针变量
指针变量的定义:指针类型的说明,即定义一个变量为指针变量
int a = 10;//定义一个整型变量为a,存储10
int * p;//定义指针变量p,存储int类型的变量的地址
p = &a; //存储a这个变量地址
地址中,有一个特殊地址:0x00表示空地址,不能操作的地址,也叫做NULL,多个指针变量可以赋值为同一个变量的地址
指针变量可以修改指针变量的存储内容(改变指针值),可以变为指向其他的变量
初始化格式:指向的数据类型 * 指针变量名 = 地址
如:
int a = 10
int b = 20;
int * p;
p = &a;//指向a
p = &b;//指向b
指针没有赋值,或初始化,指针变量就是随机值,叫做野指针
2.4、指针变量大小
指针变量定义后,是一个变量来存储地址,需要有内存空间存储地址,指针变量的大小是固定的
- 32位机器:32bit
- 64位机器:64bit
- 16位机器:16bit
64位机器上,char * ,int * ,long * ,float * ,double * 都是一样的大小,因为都是存储的地址,指针大小8B(字节)
指针的运算,就是指指针变量进行运算(指针变量存储的值的地址的运算)
指针 + n:表示把指针地址向地址增大方向移动 n个指向类型大小的地址( n 乘以指针指向类型大小)
指针 - n:表示把指针地址向地址减小方向移动 n个指向类型大小的地址( n 乘以 指针指向类型大小)
int * p = 0x21;
//则 p + 2 == 0x29;
//则 p - 3 == 0x13
指针++:先使用指针作为整个表达式(指针++)的结果 ,然后指针 = 指针 + 1
++指针:先指针 = 指针 + 1 ,然后指针作为整个表达式(++指针)的结果
指针 - 指针:两个指针见相差多个少指向的类型 数据大小
✨本篇到此结束啦!欢迎点赞收藏❤关注