C语言笔记 - 一级指针变量与变量的关系

常见一级指针变量与变量的关系

引言:

在学习C语言过程中,许多朋友对指针模糊不清,也不清楚具体的操作,只能硬着头皮上。下面是笔者对指针的简述,希望能和朋友们一起学习,共同进步!

一、变量

  1. 变量的含义:用于为变量分配存储空间,还可为变量指定初始值(简而言之,表示空间大小用于存放数据);

  2. 变量定义的一般形式: 数据类型 变量名;

例如 :

 unsigned char A;
 unsigned int B;

解析:1.unsigned char \unsigned int 表示A\B变量的存储数据类型

​ 2.A\B表示这个变量的名字,即变量名。

​ 使用方法:比较简单

    A = 123;
​    B = 65535;

​ 空间大小:一般情况下

​ unsigned char 的存储空间为8bit,即数据范围0-255;

​ unsigned int的存储空间为16bit,即数据范围0-65535;

  1. 这里引入取地址运算符:&

A变量存放的是数据,那么在存储空间有对应的地址,假设地址为:

&A = 0X000000;

同样;B变量也有对应的地址。假设地址为

 &B = 0X000003;
  1. 引入间接运算符 *;

每个数据有相应的地址,即每个地址也有相对应的数据,那么分别声明两个地址:

(unsigned char *)(0X000000); 
(unsigned int  *)(0X000003);

由A = 123; B = 65535;可知:

*(unsigned char *)(0X000000) = 123; 
*(unsigned int  *)(0X000003) = 65535;

3.因为内存是连续的,这里用一小部分内存大小来做说明,如下

变量名A0A1A…A10
变量存储的数据10015030
变量对应的地址0X0000000X0000010X00000A
                                           表格一

前面第二点说过,每个数据有相应的地址,即每个地址也有相对应的数据。这里对A1进行运算有:

取A1的地址:&A1 = 0X000001;

取地址中存储的数据:*(unsigned char *)0X000001 = 150;

二、指针

1.指针的含义:指针就是指向一个特定内存地址的一个变量。顾名思义,指针变量是一种特殊的变量,存放的是数据的地址,即指针变量表示地址。

2.指针变量定义的一般形式为:基类型 *指针变量名

例如:unsigned char *P;

解析:
1.“*” 表示该变量的类型为指针类型。指针变量名为 P,而不是 *P。
2.那么 P指向unsigned char型一个特定内存地址的变量,表示存储内存地址。

​ 使用方法:

​ P是指针变量表示内存地址(表示某一数据的地址),而A是普通变量表示数据。它们的性质不一样,即“单位”不一样。那么要想它们数据共享,它们两者必须等价(将单位统一)。如下:

​ 1.这里引入取地址运算符:&

​ A:是普通变量表示数据;

​ &A:表示内存中普通变量A数据所在的位置,即A数据的内存地址。

​ P:是指针变量存储内存地址

有:

P = &A; //P存储的数据(表示某一数据的地址)变为A数据的内存地址

2.再次引入间接运算符 * 。(注意:这里的*是运算符号,用于计算。而(unsigned char *P)中的*起一个声明的作用,表示这是一个指针。)

​ P:是指针变量存储内存地址

​ *P: 表示指向内存地址中存放的数据。

​ A:是普通变量表示数据;

​ 根据P = &A有:

*P = A; //P指向A的数据

3.因为内存是连续的,这里用一小部分内存大小来做说明,如下

指针变量名PA0PA1PA…PA10
存储数据(表示地址)0X0000000X0000010X00000A
指针变量的地址0X00000B0X00000C0X000014
                                              表格二

表中定义:unsigned char *PA0, *PA1, …,*PA16,我们知道指针变量是一种特殊的变量,同理,指针变量也有自己对应的地址。

由表格二有:PA0存储数据(表示某一数据的地址)为:0X000000,它自身的地址为&PA0 = 0X00000B;

由表格一有:A0的地址0X000000; A0的值为100,

那么满足:PA0 = &A0; //即PA0的数据表示A0地址,指向A0。也就是证明了PA0是一种特殊变量,存储普通变量的地址。而普通变量存储的是数据。

​ *PA0 //表示指向0X000000 地址上的数据,

​ 即*PA0 = *(unsigned char *)0X000000 = A = 100 = *(&A);

根据以上推广:

     PA10 == &A10 == 0X00000A;
    *PA10 == *(&A10)==A10 == * (unsigned char *)0X00000A == 30;

三、总结:

顾名思义,指针变量是一种特殊的变量,它不同于一般的变量,一般变量存放的是数据本身,而指针变量存放的是某一数据的地址,即指针变量表示地址。

四、一级指针变量和普通变量的简易应用

void main(void)
{
  unsigned char *PA0;
  unsigned char A;
  unsigned char B;

  A = 10;   //A的数据为10
  B = 20;   //B的数据为20
  
1)     PA0 = & A; //指针变量存放普通变量的地址 此时PA0存放A的地址
2)     B = *PA0; //因为PA0存放A的地址, 所以*PA指向A的地址上的数据(10)
3)     Printf(“B的值等于%d”,B); // 输出结果为10

 While(1);
}

描述:

1)通过将A的地址赋值给指针变量PA0,那么PA0的数据就表示A的地址。

2)再使用‘*’间接运算符指向PA0的数据(PA0存放A的地址,即指向A地址上的数据)就得出了A的数据为10

3)输出B的值等于10

作用:可见,指针是操作数据的地址。可以轻易的共享内存数据,使程序更为快速高效。是C语言的灵魂。

                                                                        2020.09.28 于深圳龙岗
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值