指针—初阶

这篇博客介绍了指针的基础知识,包括指针的定义、如何编址、指针类型的含义和指针运算。同时,讨论了野指针的概念,分析了其成因并提出了避免野指针的策略。

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

指针——初阶

哈喽!这里是我的第一篇博客,将在这里记录我学习的过程。

1.指针是什么?

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

2.如何编址?

在32位机器上,有32根地址线,每根地址线都有”0“和”1“两种情况,可以产生2^32个地址编号,每个地址编号都代表着1byte。 内存有2^32byte/1024/1024/1024=4GB。

同样的,在64位机器上,有64根地址线,可以产生2^64个地址编号。 内存有2^ 64byte/1024/1024/1024=2^ 32*4GB。

注意:地址在内存中存储在指针变量里时,由于二进制数太长,因此用十六进制数代替二进制数进行存储,且1个十六进制位=4个二进制位。

3.指针类型的意义

(1).指针类型进行解引用操作的权限不同。

(2).指针±整数的步长不同。(即移动指针的时候,移动的最小步长不同。)

注意:标准规定,允许指向数组的指针与指向数组最后一个元素后面那个内存位置的指针进行比较,不允许与指向数组首元素之前的那个内存位置的指针比较。

4.指针的运算

(1).指针±整数

int arr[3]={1,2,3};
int* p=arr;
p++;

在运行到第二行代码时,p指向的是arr[0],p++以后,p指向arr[1]。

(2).*p±整数

解引用 * 操作符的优先级比较低,p会先和±结合,即*p±整数,会先将p±整数,在对移动后的指针进行解引用操作 * 。

*p++;
//可拆解为
*p;
p++;

(3).指针–指针

指针-指针计算的是指针之间的元素个数,前提条件是两个指针都指向同一块连续的内存。

关于野指针

指向位置不可知的指针称为野指针。

1.野指针的成因

(1).指针未初始化。
(2).指针越界访问。
(3).指针指向的空间被释放。

2.如何规避野指针

(1).指针使用时,必须初始化。
(2).避免指针越界访问。
(3).避免返回局部变量地址。(栈空间)
(4).指针指向的空间被释放时,及时置空NULL。
(5).指针使用之前检查有效性。

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值