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

本文详细介绍了指针的基本概念,包括数据在内存中的存储与指针的作用。通过实例展示了如何使用取地址操作符获取变量地址,并强调了解引用操作符(*)的正确使用。探讨了指针变量和二级指针的应用,旨在帮助读者消除对指针的恐惧,掌握基本的指针操作技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

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

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

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

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

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

代码的运行结果为:

 

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

念君思宁

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值