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

五、指针和数组

首先我们来看以下代码

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

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

目录
相关文章
|
2月前
|
存储 编译器 C语言
【C语言】指针大小知多少 ?一场探寻C语言深处的冒险 !
在C语言中,指针的大小(即指针变量占用的内存大小)是由计算机的体系结构(例如32位还是64位)和编译器决定的。
184 9
|
2月前
|
安全 程序员 C语言
【C语言】指针的爱恨纠葛:常量指针vs指向常量的指针
在C语言中,“常量指针”和“指向常量的指针”是两个重要的指针概念。它们在控制指针的行为和数据的可修改性方面发挥着关键作用。理解这两个概念有助于编写更安全、有效的代码。本文将深入探讨这两个概念,包括定义、语法、实际应用、复杂示例、最佳实践以及常见问题。
65 7
|
2月前
|
存储 NoSQL 编译器
【C语言】指针的神秘探险:从入门到精通的奇幻之旅 !
指针是一个变量,它存储另一个变量的内存地址。换句话说,指针“指向”存储在内存中的某个数据。
124 3
【C语言】指针的神秘探险:从入门到精通的奇幻之旅 !
|
3月前
|
存储 程序员 编译器
C 语言数组与指针的深度剖析与应用
在C语言中,数组与指针是核心概念,二者既独立又紧密相连。数组是在连续内存中存储相同类型数据的结构,而指针则存储内存地址,二者结合可在数据处理、函数传参等方面发挥巨大作用。掌握它们的特性和关系,对于优化程序性能、灵活处理数据结构至关重要。
|
3月前
|
程序员 C语言
C语言中的指针既强大又具挑战性,它像一把钥匙,开启程序世界的隐秘之门
C语言中的指针既强大又具挑战性,它像一把钥匙,开启程序世界的隐秘之门。本文深入探讨了指针的基本概念、声明方式、动态内存分配、函数参数传递、指针运算及与数组和函数的关系,强调了正确使用指针的重要性,并鼓励读者通过实践掌握这一关键技能。
72 1
|
3月前
|
算法 C语言
C语言中的文件操作技巧,涵盖文件的打开与关闭、读取与写入、文件指针移动及注意事项
本文深入讲解了C语言中的文件操作技巧,涵盖文件的打开与关闭、读取与写入、文件指针移动及注意事项,通过实例演示了文件操作的基本流程,帮助读者掌握这一重要技能,提升程序开发能力。
224 3
|
3月前
|
存储 算法 程序员
C 语言指针详解 —— 内存操控的魔法棒
《C 语言指针详解》深入浅出地讲解了指针的概念、使用方法及其在内存操作中的重要作用,被誉为程序员手中的“内存操控魔法棒”。本书适合C语言初学者及希望深化理解指针机制的开发者阅读。
|
3月前
|
存储 C语言 计算机视觉
在C语言中指针数组和数组指针在动态内存分配中的应用
在C语言中,指针数组和数组指针均可用于动态内存分配。指针数组是数组的每个元素都是指针,可用于指向多个动态分配的内存块;数组指针则指向一个数组,可动态分配和管理大型数据结构。两者结合使用,灵活高效地管理内存。
|
3月前
|
存储 NoSQL 编译器
C 语言中指针数组与数组指针的辨析与应用
在C语言中,指针数组和数组指针是两个容易混淆但用途不同的概念。指针数组是一个数组,其元素是指针类型;而数组指针是指向数组的指针。两者在声明、使用及内存布局上各有特点,正确理解它们有助于更高效地编程。
|
3月前
|
存储 C语言
C语言如何使用结构体和指针来操作动态分配的内存
在C语言中,通过定义结构体并使用指向该结构体的指针,可以对动态分配的内存进行操作。首先利用 `malloc` 或 `calloc` 分配内存,然后通过指针访问和修改结构体成员,最后用 `free` 释放内存,实现资源的有效管理。
273 13

热门文章

最新文章