指针的水很深,叔带你把握---C语言指针合集(1)

这是指针系列的第一篇

既然是第一篇,肯定就是指针初阶了,废话不多说,开整.

目录

1.内存和地址

2.指针变量的内容、类型

3.间接访问操作符(解引用操作符)

4.总结

一分钟学完本节内容


1.内存和地址

指针的和内存分不开.

内存是一个抽象名词

打个比方:

内存是长街上的一排房屋,每座房子都可以容纳数据,每座房子都有自己的标号,人们通过房子的标号回自己的家.

(房子的标号就是地址,每个标号指向对应的房子,我们就把这叫做每个地址指向特定的内存)

在C语言初阶,我们只需要把内存理解为一个又一个的内存块.

地址:一般用十六进制表示

例:(注:%p是打印地址的格式

0133FA38就是a的地址.

0x0133FA38是什么?

等价于0133FA38,0x表示它是一个十六进制数.

----------大概对内存和地址有个感觉------

2.指针变量的内容、类型

指针的内容是一个地址.

指针的类型有很多种

int* 
short *
long* 
float*
double*
等等等等

类型 +  *  表示一个指针类型

值得一提的是:void*是万能指针,可接受任何类型的地址,那为什么还需要其他类型的指针呢,这个在第二节里讲!

例题:int a=10;

创建一个指针指向存储a的那块内存,也即创建一个指向a的指针,怎么做?

指针是个变量,是变量就有类型(void也是一种类型)

所以先确定指针的类型,再确定指针里面放什么

one:指针的类型怎么确定?

int a=10,a是一个整型,要用整型指针接收,整型指针:int*

two:指针里面放什么?

指针的值是一个地址,用取地址符取a的地址放入指针变量.

综上 得出: int* pa=&a;

整合:

那么float b=3.14,double c=3.1415926可以怎么创建指向它们的指针?

不妨打开自己的编译器试试吧!

上面的同一段代码我执行了两遍,打印的都是pa的值,那你发现了什么?

两次的结果是不同的

小知识:系统分配内存时随机的,虽然是同一个变量,但是系统开辟的空间是不同的(有些时候碰巧相同)

小结:指针变量里放的是一个地址,类型多种多样.

----------知道指针的值和类型

3.间接访问操作符(解引用操作符)

还记得开篇讲的那个例子吗?

一排房子,有对应的标号(门牌号),人们通过标号回家

现在人们走到了家门口,怎么进去?用钥匙呗...

那什么是钥匙?解引用操作符(*)就是这把钥匙

当你走到了家门口,掏出这个大宝贝就能进家门访问里面的数据了

解引用操作符功能:通过一个地址访问地址里对应的数据

int main()
{
	int a = 10;
	int* pa = &a;
	int b = *pa;
	printf("%d\n", b);
	//b的值是多少?
	return 0;
}

b通过pa和解引用操作符*访问到了a的值,并将a里的数据拷贝到了b

小结:*是解引用操作符,可寻址访问地址里对应的内容.

4.总结

人们通过地址来给内存标号,内存像一个容器

&可以取到变量的地址,取到的地址可以放入指针(变量)中

指针变量本质上还是一个变量,不过变量存的是是一个地址罢了

地址的本质也不过是一串数字

可以用 * 解引用地址来访问地址对应的内容

-----

一分钟学完本节内容

理解下面这几句代码背后的东西就是这节的主要内容!

--------------

 如果有启发的话,留个赞再走吧,这对我帮助很大!

不点?

  • 9
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 7
    评论
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

喜欢乙醇的四氯化碳

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

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

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

打赏作者

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

抵扣说明:

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

余额充值