详解:取地址操作符(&)及解引用操作符(*)

举报
念君思宁 发表于 2023/02/16 18:21:09 2023/02/16
【摘要】 详解:取地址操作符(&)及解引用操作符(*)

详解:取地址操作符(&)及解引用操作符(*)

     对于指针:我想,应该是多数人的梦魇,包过笔者也一样,之前老是听前辈说过,指针怎么怎么样,怎样难!但是,总归是片面的,不可取的,现在笔者也在刚刚学习到了:指针,所以打算博客一篇,来纪念一下:第一次对于指针的初步认识,及感悟!

    首先:我们需要理解指针的两个概念:

数据在内存中的存储:编号----》地址-----》指针

1.指针是内存中最小单元的编号(1个字节),也就是地址!

2.平时口语中所说的指针:通常指的就是指针变量,是用来存放内存地址的变量!

因此:我们对于上述的简单总结为:

指针就是地址,口语中所说的指针,通常指的就是指针变量

指针变量:通过&(取地址操作符)取出变量的内存起始地址,把地址存放在一共变量中,这个变量就是指针变量!

下面来用代码介绍如何打印地址!

#include <stdio.h>
int main()
{
	int a = 10; 
 
	printf("%p\n", &a);   //    用%p来打印地址
 
	return 0;
}

在这里printf("%p\n", &a);   //    用%p来打印地址,我们需要着重注意%p是用来打印地址的!

代码的运算结果为:

 因为,我们给a赋初始值a=10;将a存储起来就需要一个地址(电脑分配),所以我们可以通过这个地址来找回a的值,这个也是可行的,这个就是需要我们对'&a',进行解引用操作(*),对于解引用操作(*),下面笔者将会进行讲解!因此读者,请稍安勿躁!

 对于这个代码,在第150行是不可取的,下面已经给了警告!

虽然运转出来结果了,但是做法是不可取的!

因此,正确的书写规范为:

#include <stdio.h>
int main()
{
	int a = 10;
	int* pa = &a;
	printf("%d\n", *pa);
	//printf("%d\n", pa);   //错误写法,不可取
 
	return 0;
}

因此,用指针来通过取地址求值时候,需要进行有效的代码!

int a = 10;    int* pa = &a;  在这段代码中,笔者希望能够正确理解各个所代表的含义!

对于int*pa=&a,在这句中  int 指向a的类型为int型,*指向pa为指针变量!

同理,对于;char  ch;   char  *pc=&ch;有着一样的解释,根据上面的解释,就能得到该段代码表示的具体意思!

但是,对于   int* pa = &a;   可以写成:int* pa;    pa = &a;    因此,上述代码可以写为:

#include <stdio.h>
int main()
{
	int a = 10;
	
	int* pa;
	pa = &a;
 
	printf("%d\n", *pa);
 
	return 0;
}

代码的运行结果也是一样的!

 

int* pa;   pa = &a;,在该段代码中,我们可以看出来:pa只是一个定义了int类型的指针,(  pa = &a)前面并没有任何标识; 但是对于printf("%d\n", *pa);打印结果时候,用了*(解引用操作符)这个跟int*pa=&a;及int *pa;中的表示意义是不一样的!需要多多注意

pa虽然是指针,存放着a的地址,但是pa也有着自己的地址!通过对pa的地址进行解引用操作,也一样可以找到a的值!

#include <stdio.h>
int main()
{
	int a = 10;
 
	//int* pa = &a;
 
	int* pa;
	pa = &a;
 
	printf("%d\n", *pa);
 
	int** ppa = &pa;
 
	printf("%d\n", **ppa);
 
	return 0;
}

在这个代码里面,将涉及部分二级指针的内容!

代码的运行结果为:

 

有意者请联系笔者私聊,或者参考读者以后代码!在这里笔者将不再进行涉及二级指针的内容

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

评论(0

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

全部回复

上滑加载中

设置昵称

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

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

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