写点什么

【C 语言】指针 Three 之 [赋值语句的方法、指针变量的大小、上述总结、 * 和 & 认识、对解引用 (*) 认识]

作者:泽En
  • 2022 年 5 月 18 日
  • 本文字数:1384 字

    阅读完需:约 5 分钟

【C 语言】指针 Three 之 [赋值语句的方法、指针变量的大小、上述总结、 * 和 & 认识、对解引用(*)认识]

​​​🚩write in front🚩

🔎​​Hello,大家好我是泽 En,一起共同学习,多多指教(●'◡'●)🔎

🎁欢迎各位→点赞👍 + 收藏⭐️ + 留言📝

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

💬总结:希望你看完之后,能对你有所帮助,不足请指正!共同学习交流🖊

📢2021 年度博客之星物联网与嵌入式开发 TOP5,2021 博客之星 Top100 阿里云专家博主^星级博主 CSDN⇿掘金⇿InfoQ[创作者]

 💣赋值语句的方法

如下代码所示↓

int a;int *p;p= &a;
复制代码


不允许把一个数赋予指针变量,故下面的赋值是错误的。

int * p;p = 10;
复制代码


被赋值的指针变量前不能再加“*”说明符,如写为 *p=&a 也是错误的。

另外,指针变量和一般变量一样,存放在它们之中的值是可以改变的,也就是说可以改变它们的指向。


🗡指针变量的大小

如下代码所示

#include<stdio.h>int main(void){    printf("%d\n", sizeof(int *));	printf("%d\n", sizeof(long *));	printf("%d\n", sizeof(long long*));	printf("%d\n", sizeof(float *));	printf("%d\n", sizeof(double *));	printf("%d\n", sizeof(short *));	return 0;}
复制代码


运行结果🖊

④(全部)

从上述结果可以看出指针变量都是④个字节

为什么不同类型的变量的地址所占的字节数都是一样的呢

原因是:他们数据类型都是指针类型,切记(☆-v-)

🔥注意→这个是在 32 位的操作系统 = 4 字节,64 位的操作系统上 = 8 字节


⚔ 上述总结

指针就是变量,用来存放地址的变量。(存放在指针当中的值都是会被当做是地址来处理)

还有下列②个问题如下↓

  1. 一个小的单元到底是多大(①个字节)

  2. 如何进行编址

经过仔细的计算,一个字节(⑧比特位)对应其一个地址是比较合适的(①字节等于①地址)

指针就是用来存储地址的,地址是唯一表示一块地址空间。

指针大小在 32 位的平台上是④个字节,在 64 位上的平台是⑧个字节。

在 32 位平台上产生的地址线就是由 32 个 0&1 组成的地址线,在 64 位平台上产生的地址线就是由 64 个二进制 0&1 组成的地址线。


💣 * 和 & 认识

假设有一个 int 类型的变量 a,pa 是指向它的指针,那么*&a&*pa分别是什么意思呢?

*&a可以理解为*(&a)&a表示取变量 a 的地址(等价于 pa),*(&a)表示取这个地址上的数据(等价于 *pa),绕来绕去,又回到了原点,*&a仍然等价于 a

&*pa可以理解为&(*pa)*pa表示取得 pa 指向的数据(等价于 a),&(*pa)表示数据的地址(等价于 &a),所以&*pa等价于 pa


💣

表示乘法,例如 int a = 3, b = 5, c;  c = a * b; 这是最容易理解的。

表示定义一个指针变量,以和普通变量区分开,例如int a = 100;  int *p = &a;

表示获取指针指向的数据,是一种间接操作,例如 int a, b, *p = &a; *p = 100; b = *p;

表示获取指针指向的数据,是一种间接操作。这里我来举出一个代码例子↓

#include<stdio.h>int main(void){	int a = 10;	int *p = &a;	printf(" a = %d\n", a);	printf("*p = %d\n", *p);	printf("a = %p *p = %p &p = %p p = %p\n", a,*p,&p,p);	//注意:解引用改变p,同时也会改变指向a的地址(同样改变a的值同样p也会跟着改变)	a = 20;	printf(" a = %d\n", a);	printf("*p = %d\n", *p);	*p = 50;	printf(" a = %d\n", a);	printf("*p = %d\n", *p);	int b = *p;	printf(" b = %d", b);	return 0;}
复制代码


运行结果🖊


这里大家可以好好思考下为什么,为什么运行结果是这样看看能不能说出来。这样你才能真正的掌握这些知识点。

发布于: 刚刚阅读数: 2
用户头像

泽En

关注

一起happy! 2022.01.29 加入

谁也不知道旅途的终点是怎么样的,现在只不过是开始。便全力以赴!终点必将是星辰大海。 2021年度博客之星物联网与嵌入式开发TOP5 2021博客之星Top100 阿里云专家博主^星级博主 CSDN⇿掘金⇿InfoQ[创作者]

评论

发布
暂无评论
【C 语言】指针 Three 之 [赋值语句的方法、指针变量的大小、上述总结、 * 和 & 认识、对解引用(*)认识]_5月月更_泽En_InfoQ写作社区