【初阶指针 1 ---从入门到入土】

本文标签 :    指针概念      指针变量     指针和指针类型


前言

指针,是C语言中的一个重要概念特点,也是学好C语言的关键,要想了解指针,就得先从内存下手,掌握了内存就可以清楚的知道指针和地址以及指向对象的关联


一、指针概念&&what's内存?

    内存 (听我唠唠) : 

内存是电脑上的存储器,所有的程序在运行时都在内存中进行.

(1)我们如何使用内存?:

内存空间就好比我们现实生活中的地图,地图上的地址都给上编号,例如:xx省xx市xx区,就能精确的找到一块空间.  所以内存也是同样的道理,它好比一块大的空间,那我们如何去使用呢?

我们首先得解决两个问题  : 1.内存如何编号的   2.一个内存单元占多大空间呢?

----------------------------------------------------------------------------------------------------------------------

第一个问题1:

计算机分32位和64位:-----32指32根地址线,可以进行通电,就会转换成电信号,(分正负(1/0)),64位同理.

 而 电信号 可以转换为 数字信号 ,也就是我们熟知的1 和 0 组成的二进制序列 组成的二进制序列就是32位, 产生的序列可能性就是  000000000...(32个全0)~~~11111111(32个全1) 之间 在这个过程中就产生了2^32个二进制序列 ,这些二进制序列就是内存的编号,我们就把这些编号称为内存单元的地址.

-------------------------------------------------------------------------------------------------------------------------

第二个问题2:

一个内存单元我们管理多大空间呢,计算机单位有 Bit ,Byte , Kb ,MB , GB , TB....(1Bit=8Byte,  1Kb=1024Byte , 1MB=1024KB,以此类推)

每一个地址(也就是1和0 组成的二进制序列) 对应一个内存单元的话,那么这么多的地址就可以管理2^32个内存单元,那么一个内存单元有多大呢?   假设:一个内存单元是1Bit,那就是2的32次方个比特位的空间  2^32Bit 转换为十进制: 4,294,967,296 Bit ,再除以8得到字节 536,870,912Byte, 再除以1024得到KB 524,288 KB ,再除以1024 就得到 512 MB,除以 1024 转为GB就是 0.5GB. 最终C语言规定 :一个内存单元占的空间就是一个字节(Byte),然后分配地址,也就是说一个字节就给一个编号.

知道了以上这些是非常重要的,有了这些基础的铺垫,才能更加清晰了解之后 地址以及指针的概念.

二、指针变量

接下来了解一下指针变量:

1.定义一个整型变量 a=10,它在内存中占4个字节,%p打印出来的就是a在内存中的地址

2. 当a可以取地址时,&a同样也是一个值,这个值如果要存起来,我们就要用一个空间来存放a的值

3.一个指针是一个地址,是一个常量。而一个指针变量却可以被赋予不同的指针值,是变量。但常把指针变量简称为指针。“指针”是指地址,是常量,“指针变量”是指取值为地址的变量。定义指针的目的是为了通过指针去访问内存单元。

假设用pa(变量名),用来存放a的地址, 加上*pa就是代表pa是指针变量,int就是pa所指向元素的类型(如下)

4. *  代表解引用操作,*pa 就是通过pa所指向的地址,找到a

(如下),打印结果为 20 .

 5.最后,我们需要注意的是 指针的大小都是相同的!不论是int* ,char*, short*.....,他们的指针大小都是相同的4 或者 8, 32位机器上 都是4 个字节 ,64位机器上 都是 8个字节 .

  如下 测试 指针 变量占用的内存空间大小 :​ 定义不同指针类型变量 , 使用 sizeof 函数 获取该变量的大小 :  最终结果都是 4个字节

#include <stdio.h>
int main()
{
    int * a ;
    char* pc ;
    float* pf;

    printf("%d\n,sizeof(pa));// 4
    printf("%d\n,sizeof(pc));// 4
    printf("%d\n,sizeof(pf));// 4 

    return 0;
}

三、指针和指针类型

指针类型的意义:

变量有不同的类型,整形,浮点型,同样指针也是有类型的.

如下, 变量 p 和 pc 所存放的值是一样的,那他们分别 +1 后他们的值是否一样呢? 打印他们的地址测试:

 我们发现 他们 存放的地址的值相等, 而他们 +1 后却不同, 我们不难看出 ,如果是一个整型指针,是+4,如果是字符指针是+1.  因为字符指针+1相当于跳过一个字符,所以 +1, 而如果是整型指针,我们相当于跳过一个整型,跳过四个字节,所以 +4 , 因为 p 和 pc 的类型不同.

所以 :  指针类型决定了:

1.指针解引用的权限有多大(能操作几个字节)

2.指针走一步,能走多远(长度)  ,  int+4,char+1,double+8


总结:

---指针就是变量,是用来存放地址的变量 .它所存放的值都是地址.

--- 指针是用来存放地址的,地址是唯一的一块内存空间.

--- 32 位机器指针大小是 4 个字节,64 位机器指针大小是 8 个字节.

--- 指针的类型决定了指针向前或者向后走一步有多大(距离).

--- 指针类型是有意义的.

如有不足,还望指出

都看到这了,给个三连呗

 

猜你喜欢

转载自blog.csdn.net/2201_75533641/article/details/128967930
今日推荐