【C语言】指针Ⅱ --- 变量与指针、定义指针变量、有效声明指针、使用指针。

时间:2022-12-05 18:06:21

????write in front????   

????大家好,我是謓泽,希望你看完之后,能对你有所帮助,不足请指正!共同学习交流????

????2021年度博客之星物联网与嵌入式开发TOP5~2021博客之星Top100~阿里云专家博主 & 星级博主~掘金⇿InfoQ~51CTO创作者[新人创作榜No.11]~周榜393﹣总榜1024⇿全网访问量40w+????

????本文由 謓泽 原创 发布在51CTOP 如需转载还请通知⚠

????个人主页-​謓泽51Ctop的博客​????

????欢迎各位→点赞???? + 收藏⭐️ + 留言????

????系列专栏-​謓泽51Ctop的分类_51CTO博客​????

✉️我们并非登上我们所选择的舞台,演出并非我们所选择的剧本????





【C语言】指针Ⅱ --- 变量与指针、定义指针变量、有效声明指针、使用指针。

 ???? 变量与指针 

变量的地址是 变量 指针 二者之间纽带,如果一个变量包含了另一个变量的地址,则可以理解成第一个变量指向第二个变量。所谓 "指向" 就是通过地址来进行实现的。 因为指针变量是指向一个变量的地址,所以将一个变量的地址值 赋值给这个指针就 "指向" 了该变量 ????

例如:将变量 i 的地址值赋值给指针变量 p 中,p 就指向 i,其关系如下所示↓

【C语言】指针Ⅱ --- 变量与指针、定义指针变量、有效声明指针、使用指针。

在程序代码中是通过 变量名 内存 单元进行存取操作的,但是代码经过编译后已经将变量名转换为该变量在内存中存放的地址,对变量值的存取都是通过地址进行的。如下代码所示

a+b

其含义是:根据变量名与地址的对应关系,找到变量 a 的地址。假设 1000,找到变量 i 的地址 1000,然后从 1000 开始读取 4 个字节(整形类型)存放在 CPU 的寄存器当中,再找到变量 j 的地址 1004 ,从 1004 开始读取 4 个字节数据存放在 CPU 另一个寄存器当中,通过 CPU 的加减法从中计算出来 ????


⚔ 定义指针变量

对指针变量的定义包括 个内容↓

  1. 指针类型说明,即为变量为一个指针变量
  2. 指针变量名
  3. 变量值(指针)所指向的变量的

定义指针变量与定义普通变量非常类似,不过要在变量名前面加星号(*) 格式如下所示↓

datatype *name;或者 datatype *name = value;

解释:* 表示一个指针变量,datatype 表示该 指针变量所指向的数据的类型。如↓

int *p;// %p打印地址

【C语言】指针Ⅱ --- 变量与指针、定义指针变量、有效声明指针、使用指针。

表示 p 这是一个指针变量,变量名即为指针的变量名,类型说明符表示本指针变量所指向的变量的数据类型

是指向int 类型数据的指针变量,至于究竟指向哪一份数据,应该由赋予它的值决定。如下↓代码所示。

int *p1;   // p1 是指向整形变量的指针
float *p2; // p2 是指向浮点变量的指针
char *p3; // p3 是指向浮点变量的指针

【C语言】指针Ⅱ --- 变量与指针、定义指针变量、有效声明指针、使用指针。

????注意:个指针变量只能是指向同类型的变量。

int a = 100;    
int *pa = &a;

【C语言】指针Ⅱ --- 变量与指针、定义指针变量、有效声明指针、使用指针。

(1) a在内存中要分配空间4个字节。

(2) 取出a的地址赋值给指针变量papa说明执行对象是int类型。

????注意→取地址a并不会拿出4个字节的地址,只会拿出第一个字节地址。

1字节 = 8比特位,按照十六(0x)进制的方式来的。


????有效声明指针

有效指针,顾名思义就是可以有效的在程序当中运行不会出现错误的指针类型 ????

int    *ip;    /* 一个整型的指针 */
double *dp; /* 一个 double 型的指针 */
float *fp; /* 一个浮点型的指针 */
char *ch; /* 一个字符型的指针 */

【C语言】指针Ⅱ --- 变量与指针、定义指针变量、有效声明指针、使用指针。


????使用指针

使用指针时会频繁进行以下几个操作:定义一个指针变量把变量地址赋值给指针访问指针变量中可用地址的值。这些是通过使用一元运算符(*)来返回位于操作数所指定地址的变量的值。下面的实例涉及到了这些操作如下↓ 

#include<stdio.h>
int main(void)
{
int a = 20; //a在内存中要分配空间4个字节
int *pa = &a; //取出a的地址赋值给指针变量pa, pa说明执行对象是int类型!
printf("无改变:%d\n", *pa);

*pa = 30;//进行解引用操作符 *pa 就是通过解引用(pa)里边的地址来找到地址a的值。
printf("改变的:%d\n", *pa);//解引用操作符是可以改变取地址原来的值的!

return 0;
}

【C语言】指针Ⅱ --- 变量与指针、定义指针变量、有效声明指针、使用指针。

运行结果????

a = 20

b = 30

知识内容→上面的结果也是通过指针变量取得数据, 然后再通过解引用(*)操作符改变取地址原来的值。指针的解引用可以获取地址赋值给指针变量从而获取数值的大小(这个是初学者有时候不明白的地方,不懂可以多看几遍或者自己上手代码进行调试)