熟悉C语言指针

简介: 熟悉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中的指针±整数的代码意义

五、指针和数组

首先我们来看以下代码

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

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

目录
相关文章
|
1天前
|
C语言
指针进阶(C语言终)
指针进阶(C语言终)
|
1天前
|
C语言
指针进阶(回调函数)(C语言)
指针进阶(回调函数)(C语言)
|
1天前
|
存储 C语言 C++
指针进阶(函数指针)(C语言)
指针进阶(函数指针)(C语言)
|
1天前
|
编译器 C语言
指针进阶(数组指针 )(C语言)
指针进阶(数组指针 )(C语言)
|
3天前
|
C语言
【C语言】:详解函数指针变量,函数指针数组及转移表
【C语言】:详解函数指针变量,函数指针数组及转移表
9 2
|
3天前
|
C语言
【C语言】:详解指针数组,数组指针及(二维)数组传参(2)
【C语言】:详解指针数组,数组指针及(二维)数组传参(2)
6 1
|
3天前
|
Serverless C语言
【C语言】:对(一维)数组与指针的深入理解(1)
【C语言】:对(一维)数组与指针的深入理解(1)
6 1
|
3天前
|
安全 C语言
【C语言】:野指针和assert断言
【C语言】:野指针和assert断言
7 0
|
3天前
|
C语言
【C语言】:深入理解指针变量
【C语言】:深入理解指针变量
5 0
|
3天前
|
存储 C语言
C语言的函数返回值和指针
C|函数返回值(区分各类值)和指针(区分各类存储空间)的细节