【C语言】指针总结|* 和 & 认识|对解引用(*)认识

举报
謓泽 发表于 2023/09/28 20:05:08 2023/09/28
【摘要】 【C语言】指针总结|* 和 & 认识|对解引用(*)认识

⚔ 上述总结

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

还有下列②个问题如下↓

  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;
}

运行结果🖊

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

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。