熟悉C语言指针

本文详细解释了指针的概念,包括其作为内存地址的存储变量,不同类型指针的作用,以及指针与整数的运算。重点讲解了野指针的定义和成因,以及如何避免。同时介绍了指针与数组的关系,展示了指针运算在实际编程中的应用。

一.、指针是什么?

定义:

指针就是内存中最小单元的编号 也就是地址
我们平时说的指针 其实是一个指针变量 是用来存放内存地址的变量

 内存:

 

每一块内存都有和它对应的地址

指针变量 我们可以通过&操作符取出一个地址 把地址可以存放到一个变量中 这个变量就是指针变量

它用来存放知识 放进里面的值都按照地址来处理

那么这里有两个问题就要被引出来了

1 一个最小的单元究竟是多大?

2 如何编译地址

对于问题一 我们经过研究规定 一个最小的内存单元是一个字节

对于问题二 我们在三十二位的系统中 假设有三十二根地址线 假设每一根地址线在寻址的时候产生高电平和低电平(1或者0)

那么它们可能产生的数据就是

0000 0000 0000 0000 0000 0000 0000

0000 0000 0000 0000 0000 0000 0001

1111 1111 1111 1111 1111 1111 1111 1110

1111 1111 1111 1111 1111 1111 1111 1111

一共2的32次方个地址

总结

那么讲到这里我们就应该明白了 在32位系统上 地址就是32位数 占用四个字节的大小

在64位系统上 地址就是64位数 占用八个字节的大小

二、指针和指针类型

这里我们在讨论一下:指针的类型
我们都知道,变量有不同的类型,整形,浮点型等。那指针有没有类型呢?
准确的说:有的。

 

我们存放那个类型数据的地址就要使用什么类型的指针

举个例子 我们要存放int 类型数据的地址 就要使用int * p来存放

char类型的数据的地址就要使用char * p来存放

那么指针类型的意义是什么呢?

让我们带着这个疑问 走进下面的章节

1. 指针±整数

总结: 从这里我们就能看出来 指针的类型决定了指针向前或者向后走一步有多大的距离

2. 指针的解引用

打出上面的一段代码 让我们进入调试模式看看

我们可以发现 它们修改的内容也不一样 这样我们就可以知道

**指针的类型决定了 对于指针进行解引用时能有多大的权限 **

综上
1 指针的类型决定了指针向前或者向后走一步有多大的距离
2 指针的类型决定了 对于指针进行解引用时能有多大的权限

 三、野指针

概念: 野指针就是指针指向的位置是不可知的(随机的、不正确的、没有明确限制的)

 1. 成因

1 .指针未初始化

2. 指针越界访问

3. 指针指向的空间释放

这里的p就是一个野指针 因为前面向内存申请的空间已经释放了

2.如何规避野指针

其实这都是一些套话了 但是还是讲一下吧 大家使用指针的时候注意就好

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

四、指针运算

1. 指针+ - 整数

2. 指针 - 指针

先说定义

**指针加减指针得到的是元素的个数 可以是一个负数 **

3. 指针的关系运算

还是这样子 和1中的指针±整数的代码意义

五、指针和数组

首先我们来看以下代码

数组名表示的是数组首元素的地址

所以 这样子写代码就是可行的

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值