熟悉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语言】指针就该这么学(1)
本文详细介绍了C语言中的指针概念及其基本操作。首先通过生活中的例子解释了指针的概念,即内存地址。接着,文章逐步讲解了指针变量的定义、取地址操作符`&`、解引用操作符`*`、指针变量的大小以及不同类型的指针变量的意义。此外,还介绍了`const`修饰符在指针中的应用,指针的运算(包括指针加减整数、指针相减和指针的大小比较),以及野指针的概念和如何规避野指针。最后,通过具体的代码示例帮助读者更好地理解和掌握指针的使用方法。
62 0
|
25天前
|
存储 NoSQL 编译器
【C语言】指针的神秘探险:从入门到精通的奇幻之旅 !
指针是一个变量,它存储另一个变量的内存地址。换句话说,指针“指向”存储在内存中的某个数据。
79 3
【C语言】指针的神秘探险:从入门到精通的奇幻之旅 !
|
25天前
|
存储 编译器 C语言
【C语言】指针大小知多少 ?一场探寻C语言深处的冒险 !
在C语言中,指针的大小(即指针变量占用的内存大小)是由计算机的体系结构(例如32位还是64位)和编译器决定的。
49 9
|
25天前
|
安全 程序员 C语言
【C语言】指针的爱恨纠葛:常量指针vs指向常量的指针
在C语言中,“常量指针”和“指向常量的指针”是两个重要的指针概念。它们在控制指针的行为和数据的可修改性方面发挥着关键作用。理解这两个概念有助于编写更安全、有效的代码。本文将深入探讨这两个概念,包括定义、语法、实际应用、复杂示例、最佳实践以及常见问题。
42 7
|
1月前
|
存储 C语言
C语言如何使用结构体和指针来操作动态分配的内存
在C语言中,通过定义结构体并使用指向该结构体的指针,可以对动态分配的内存进行操作。首先利用 `malloc` 或 `calloc` 分配内存,然后通过指针访问和修改结构体成员,最后用 `free` 释放内存,实现资源的有效管理。
126 13
|
29天前
|
存储 程序员 编译器
C 语言数组与指针的深度剖析与应用
在C语言中,数组与指针是核心概念,二者既独立又紧密相连。数组是在连续内存中存储相同类型数据的结构,而指针则存储内存地址,二者结合可在数据处理、函数传参等方面发挥巨大作用。掌握它们的特性和关系,对于优化程序性能、灵活处理数据结构至关重要。
|
29天前
|
算法 C语言
C语言中的文件操作技巧,涵盖文件的打开与关闭、读取与写入、文件指针移动及注意事项
本文深入讲解了C语言中的文件操作技巧,涵盖文件的打开与关闭、读取与写入、文件指针移动及注意事项,通过实例演示了文件操作的基本流程,帮助读者掌握这一重要技能,提升程序开发能力。
103 3
|
1月前
|
存储 算法 程序员
C 语言指针详解 —— 内存操控的魔法棒
《C 语言指针详解》深入浅出地讲解了指针的概念、使用方法及其在内存操作中的重要作用,被誉为程序员手中的“内存操控魔法棒”。本书适合C语言初学者及希望深化理解指针机制的开发者阅读。
|
1月前
|
存储 C语言 开发者
C 语言指针与内存管理
C语言中的指针与内存管理是编程的核心概念。指针用于存储变量的内存地址,实现数据的间接访问和操作;内存管理涉及动态分配(如malloc、free函数)和释放内存,确保程序高效运行并避免内存泄漏。掌握这两者对于编写高质量的C语言程序至关重要。
58 11
|
29天前
|
程序员 C语言
C语言中的指针既强大又具挑战性,它像一把钥匙,开启程序世界的隐秘之门
C语言中的指针既强大又具挑战性,它像一把钥匙,开启程序世界的隐秘之门。本文深入探讨了指针的基本概念、声明方式、动态内存分配、函数参数传递、指针运算及与数组和函数的关系,强调了正确使用指针的重要性,并鼓励读者通过实践掌握这一关键技能。
39 1