C语言:指针(初阶)

1. 指针是什么?

指针理解的 2 个要点:
1. 指针是内存中一个最小单元的编号,也就是地址
2. 平时口语中说的指针,通常指的是指针变量,是用来存放内存地址的变量
总结:指针就是地址,口语中说的指针通常指的是指针变量。
指针变量:
我们可以通过 & (取地址操作符)取出变量的内存其实地址,把地址可以存放到一个变量中,这个
变量就是指针变量
#include <stdio.h>
int main()
{
 int a = 10;//在内存中开辟一块空间
 int *p = &a;//这里我们对变量a,取出它的地址,可以使用&操作符。
    //a变量占用4个字节的空间,这里是将a的4个字节的第一个字节的地址存放在p变量
中,p就是一个之指针变量。
 return 0;
}

所以我们可以得知指针变量是用来存放地址的变量。(存放在指针中的值都被当成地址处理)。同时指针的大小在32位平台是4个字节,在64位平台是8个字节 

2.指针的类型 

 指针也是有类型的。在定义变量之后,我们要将变量的地址存起来,就需要用与变量相应的类型来存储。

从这段简单的代码就可以看出来,指针的定义方式是: type + *

以此类推:char* 类型的指针是为了存放 char 类型变量的地址。short* 类型的指针是为了存放 short 类型变量的地址。int* 类型的指针是为了存放 int 类型变量的地址。

那么指针的类型又什么用呢???大小不都是4或8字节吗?那存储大小都一样,用什么类型不都可以吗?

别急,下面会有解答~

2.1指针加减整数

从图中打印的地址我们可以看出, 指针加减整数“走的距离”由其自身的类型决定。

2.2指针的解引用

指针的类型决定了,对指针解引用的时候有多大的权限(能操作几个字节)。
比如: char* 的指针解引用就只能访问一个字节,而 int* 的指针的解引用就能访问四个字节。

 

3.野指针

野指针就是指针位置没有明确。指向的位置是不可知的。

3.1野指针成因

1.指针未初始化

2.指针越界访问

3.指针指向的空间释放

3.2如何避免野指针 

1. 指针初始化
2. 小心指针越界
3. 指针指向空间释放,及时置 NULL
4. 避免返回局部变量的地址
5. 指针使用之前检查有效性

4.指针和数组

 

 

我们可以看到p+i 其实计算的是数组 arr 下标为 i 的地址。 所以我们就可以直接通过指针来访问数组。

 

5.二级指针 

指针变量也是有地址的,存放指针变量地址的指针就是二级指针。

对于二级指针的解引用其实就是找到它存储的指针变量,如上图*ppa找到的就是pa,那么再*pa找到的就是a了。

 

6.指针数组 

数组我们了解了整型数组、字符数组等等,那指针数组就是存储指针的数组。

举个例子:

arr[i]相当于找到每个数组的首元素地址,+j相当于根据指针类型决定步长来访问数组元素的地址,最后再解引用就可以得到数组元素。
 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值