C语言基础指针知识点总结

指针入门,这一篇文章应该就够了。如有错误或不足,还望多多指正。

下面这个链接是博主录的讲解视频,本文配合视频食用更佳哦

点击查看B站指针视频讲解

一、 基本概念

1.1 地址


地址:这里以int类型为例,

因为一个int类型4个字节Byte(32位和64位机器中)
所以可以简单理解为这个int占了四个绿色小方框。

那么此时,这个int变量的地址就是1000,即第一个绿色小方框右边的数字。
即就是:这个绿色方框在内存中所处的位置。

1.2 指针

指针:还是这个例子

指针就是一个变量,比如这个变量名就叫p吧。
那这个p是个啥东西呢?
把这个1000存到p里去,即,把int类型变量a的地址存进新的变量p中。
那么p这个变量就是一个指向a的指针。

通俗理解下就是:
小明是个舔狗,喜欢小a,但是他比较害羞,不敢直接找小a。
所以小明就找到了小p。为什么找小p呢,因为小p有小a家的地址。
这样小明就可以把给小a送的东西放小a家门口了。

这里的小a和小p就相当于例子中的int类型的a变量和指向a的指针p。
我只要找到了p就相当于找到了a

1.3 为什么要使用指针这个东西呢

首先我们要明白一直知识点:

需要说明一下的是指针类型存储的是所指向变量的地址:
所以32位机器只需要32bit,而64位机器需要 64bit

由此可知,在一台电脑上,所有指针大小都是一样的。
那么,当我们定义了一些非常复杂庞大的结构体,比如这个结构体有50个字节(Byte)。
这时候,向函数中传入参数的时候,是直接把这个50个字节的数据的副本传递到形参上快?
还是,直接传递32bit或者64bit的指针快呢??

很明显,传入指针可以大大大大提高运算的效率。

1.4 指针变量的定义

刚才说了,指针变量是来保存别的变量地址的一种变量。那该如何定义呢?
如何让计算机一眼认出来这一串数字是地址,而不是普通的数字呢?

基本格式:
基本类型 *指针变量名 = &变量名;
(也可以先省略=后面的内容,先只定义,不赋值,但是还是建议定义的时候就进行赋值)

//定义变量:
int a = 666;
char b = 'b';

//定义指针变量:
//1.告诉计算机这是一个保存int类型数据地址的指针变量
int *pa = &a;

//2.告诉计算机这是一个保存char字符类型数据地址的指针变量
char *pb= &b;

上面的代码,我定义了两个指针变量,一个是p一个是p2
看见了两个奇怪的符号*&

1.4.1 *

这个符号,为取值运算符
啥是取值运算符呢?

就是,我现在有了指针,指针里存的是一个变量的地址,
我现在要通过地址取到这个变量的值。

注意:指针里存的是地址,就是通过这个地址找到这个地址住的谁。
举例
比如上面的代码中,pa这个变量存的是a的地址,变量a中存的是666。
那么*pa就可以相当于666。

所以可以明确一点。取值运算符会和指针变量连用。
为啥呢?
因为我们要通过地址取地址所指向的变量中存放的值呀!

如果还不明白没关系,在说完&后我对上面的代码解释说明一下。

一个概念:野指针

先看下面代码

#include <stdio.h>

int main(void){
   
	int *p;
	*p = 10;
	return 0;
}

这里我们首先定义了一个int类型的指针p,当然,这个p里面保存的是个地址,且这个地址所对应的存储空间只能存int数据,所以叫做int类型的指针。
注意

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

辛伯达岛

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

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

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

打赏作者

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

抵扣说明:

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

余额充值