【从零基础学习C语言】地址与指针—第六篇

 6d63dc5dd3994f75ae53a20768cc10f6.gif

个人主页: @太阳哥哥 

本文收录专栏: C语言学习之路 

其他专栏: ARM学习之路 

学习格言:路漫漫其修远兮,吾将上下而求索

欢迎点赞、关注、收藏( •̀ ω •́ )✧   一起努力,一起学习!

目录

1、地址

1.1、什么叫地址?

1.2、数据单位

1.3、大小端存储方式

2、指针与变量

2.1、什么叫指针?

2.2、指针变量

2.3、指针变量初始化

2.5、指针运算


1、地址

1.1、什么叫地址?

        地址就是在存储空间中,为了区别存储的内容,在存储空间上给上一个特殊的编号

程序在执行时,会需要使用内存空间,操作系统根据地址找到各个程序内容

        内存空间:通过内存地址来表示对应的空间

        内存大小:每个地址表示8bit(1字节)空间,最小的数据单位为位(bit)

【从零基础学习C语言】地址与指针—第六篇_第1张图片

  •         注意:地址以字节为单位,内存存储数据就是以字节为单位存储

1.2、数据单位

        1B(字节) = 8bit(位)

        1kB(千字节) = 2^10B ==1024B

        1MB(兆字节) = 2^10KB == 2^20B

        1GB = 2^10MB

        1TB = 2^10GB

        1PB = 2^10TB

1.3、大小端存储方式

        计算机存储数据时,如果数据占用多个字节,需要使用多个地址

        存储采用数据低位(低字节数据)存储到低地址,叫做小端存储,数据低位(低字节数据)存储到高地址,叫做大端存储

        小端存储图

【从零基础学习C语言】地址与指针—第六篇_第2张图片

1.4、变量地址

        系统给变量分配内存单元的起始地址,叫做变量地址

        使用格式:& 变量名

        下图中有两个变量,其所在地址分别为0x1c、0xff

【从零基础学习C语言】地址与指针—第六篇_第3张图片

int a = 10;
//a变量的地址:0x1c,占用4个字节
​
char b = ‘a’;
//b变量的地址:0xff,占用1个字节

2、指针与变量

2.1、什么叫指针?

        在计算机中,所有数据都存在内存单元(空间)中,每个内存单元都有一个地址,只要通过地址就可以找到内存单元,就可以找到内存单元数据。

        由于通过内存地址就能找到对应的内存单元数据内容,就说内存地址指向该变量数据(内存空间),我们就把这种描述叫做指针。指针就是地址指向内存空间,其实就是地址。

        指针:内存空间的地址,地址指向这个内存空间(变量数据)

2.2、指针变量

        在C语言中,允许定义变量来存储其他变量的地址,这种专门用来存储其他变量的地址 的变量,就叫做指针变量

【从零基础学习C语言】地址与指针—第六篇_第4张图片

 

        指针变量的定义:指针类型的说明,即定义一个变量为指针变量

【从零基础学习C语言】地址与指针—第六篇_第5张图片

 

int a = 10;//定义一个整型变量为a,存储10
​
int * p;//定义指针变量p,存储int类型的变量的地址
p = &a; //存储a这个变量地址

【从零基础学习C语言】地址与指针—第六篇_第6张图片

 

2.3、指针变量初始化

        地址中,有一个特殊地址: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(字节)

2.5、指针运算

        指针的运算,就是指指针变量进行运算(指针变量存储的值的地址的运算)

        指针 + n:表示把指针地址向地址增大方向移动 n个指向类型大小的地址( n 乘以指针指向类型大小)

        指针 - n:表示把指针地址向地址减小方向移动 n个指向类型大小的地址( n 乘以 指针指向类型大小)

int * p = 0x21;
//则 p + 2 == 0x29;
//则 p - 3 == 0x13

        指针++:先使用指针作为整个表达式(指针++)的结果 ,然后指针 = 指针 + 1

        ++指针:先指针 = 指针 + 1 ,然后指针作为整个表达式(++指针)的结果

        指针 - 指针:两个指针见相差多个少指向的类型 数据大小

  
✨本篇到此结束啦!欢迎点赞收藏❤关注

ade2d02221184de18874af569fd12e2c.png

你可能感兴趣的:(C语言学习之路,linux,ubuntu,学习,c语言,vim)