本帖最后由 黄大队长 于 2020-9-28 17:18 编辑
常见一级指针变量与变量的关系 引言: 在学习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; 2. 引入间接运算符 *; 每个数据有相应的地址,即每个地址也有相对应的数据,那么分别声明两个地址: (unsigned char *)(0X000000); (unsigned int *)(0X000003); 由A =123; B = 65535;可知: *(unsigned char *)(0X000000) = 123; *(unsigned int *)(0X000003)= 65535;
3.因为内存是连续的,这里用一小部分内存大小来做说明,如下 表格一
前面第二点说过,每个数据有相应的地址,即每个地址也有相对应的数据。这里对A1进行运算有: 取A1的地址:&A1= 0X000001; 取地址中存储的数据:*(unsignedchar *)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.因为内存是连续的,这里用一小部分内存大小来做说明,如下 表格二 表中定义: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; 根据以上推广: PA10 == &A10 == 0X00000A; *PA10 == 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 于深圳龙岗
|