《C游记》 第伍章 - 初识指针阴阳窍 地址还归大道真(贰)

简介: 《C游记》 第伍章 - 初识指针阴阳窍 地址还归大道真(贰)

image.gif


目录

(壹)  行经旅途遇猛虎 -- “野指针”

🚧  1.1 野指针成因

🚧  1.2 巧法规避野指针

(贰)  指针之运算

🚧  2.1 指针 +- 整数

🚧  2.2 指针-指针

🔮  课堂小补充  (利用指针 - 指针 实现 strlen)

(叁)  指针和数组

🚧  3.1 数组名

🚧  3.2 二级指针

🚧  3.3 指针数组


✅《C游记》 专栏 ✅    《小玄的C游之旅》


(壹)  行经旅途遇猛虎 -- “野指针”

概念野指针就是指针指向的位置是不可知的(随机的、不正确的、没有明确限制的)指针变量在定义时如果未初始化,其值是随机的指针变量的值是别的变量的地址,意味着指针指向了一个地址是不确定的变量,此时去解引用就是去访问了一个不确定的地址,所以结果是不可知的.


🚧  1.1 野指针成因

      1.指针未初始化1.png


2.指针越界访问2.png


 3. 指针指向的空间释放

       这部分的内容将会在动态内存开辟的时候讲解,这里可以简单提示一下。


🚧  1.2 巧法规避野指针

  1. 指针初始化 (不知指向哪里时,应该初始化为NULL)
  2. 小心指针越界
  3. 指针指向空间释放即使置NULL    
  4. 指针使用之前检查有效性  

(贰)  指针之运算

🚧  2.1 指针 +- 整数3.png


🚧  2.2 指针-指针

判断一下下面的代码结果是什么? 4.png


5.png最后得到的是两个指针间元素的个数


🔮  课堂小补充  (利用指针 - 指针 实现 strlen)6.png5.gif

(叁)  指针和数组7.png


🚧  3.1 数组名

数组名是什么?我们看一个例子8.png9.png


可见数组名和数组首元素的地址是一样的。

结论:数组名表示的是数组首元素的地址。

那么这样写代码是可行的:10.png


既然可以把数组名当成地址存放到一个指针中,我们使用指针来访问一个就成为可能。

例如: 11.png


12.png所以p+i其实计算的是数组arr下标为i的地址。

那我们就可以直接通过指针来访问数组。

如下:13.png


🚧  3.2 二级指针

指针变量也是变量,是变量就有地址,那指针变量的地址存放在哪里?这就是二级指针。14.png


15.png


🚧  3.3 指针数组

指针数组是指针还是数组?

答案:是数组。是存放指针的数组。

数组我们已经知道整形数组,字符数组。

16.png17.png


那指针数组是怎样的?

18.png19.png


6.gif7.gif

目录
相关文章
|
30天前
|
存储 Java C++
C++ 引用和指针:内存地址、创建方法及应用解析
C++中的引用是现有变量的别名,创建时需用`&`运算符,如`string &meal = food;`。指针存储变量的内存地址,使用`*`创建,如`string* ptr = &food;`。引用必须初始化且不可为空,而指针可初始化为空。引用在函数参数传递和提高效率时有用,指针适用于动态内存分配和复杂数据结构操作。选择使用取决于具体需求。
47 9
|
8天前
|
存储 C语言
C语言学习记录——7000+字长文-复习&学习指针(指针、地址、指针变量、指针与数组、指针与函数、指针数组、多级指针)二
C语言学习记录——7000+字长文-复习&学习指针(指针、地址、指针变量、指针与数组、指针与函数、指针数组、多级指针)二
12 1
|
8天前
|
存储 C语言
C语言学习记录——7000+字长文-复习&学习指针(指针、地址、指针变量、指针与数组、指针与函数、指针数组、多级指针)一
C语言学习记录——7000+字长文-复习&学习指针(指针、地址、指针变量、指针与数组、指针与函数、指针数组、多级指针)一
9 1
|
12天前
|
C++ 存储 Java
C++ 引用和指针:内存地址、创建方法及应用解析
'markdown'C++ 中的引用是现有变量的别名,用 `&` 创建。例如:`string &meal = food;`。指针通过 `&` 获取变量内存地址,用 `*` 创建。指针变量存储地址,如 `string *ptr = &food;`。引用不可为空且不可变,指针可为空且可变,适用于动态内存和复杂数据结构。两者在函数参数传递和效率提升方面各有优势。 ```
|
22天前
|
存储 前端开发 程序员
一级指针和二级指针,取地址和不取地址调用函数区别及其应用
一级指针和二级指针,取地址和不取地址调用函数区别及其应用
|
30天前
|
编译器 C++
函数指针和回调函数对函数取地址和直接使用函数名的差距
函数指针和回调函数对函数取地址和直接使用函数名的差距
60 0
|
11月前
|
存储 编译器 C语言
初识C语言指针:内存,字节划分,地址存储,简单使用,指针大小
初识C语言指针:内存,字节划分,地址存储,简单使用,指针大小
|
11月前
|
存储 C语言
|
11月前
学C的第五天(初识指针,内存产生内存单元地址过程,指针函数介绍和其大小;结构体补充)-1
13*指针: 13.1 -- 内存: 内存是电脑上特别重要的存储器,计算机中程序的运行都是在内存中进行的。 【32位操作系统的内存由32根地址线产生的高低电位(1/0), 划分为2的32次方个地址(编号\指针),一个地址为一个字节, 等于8比特。】
|
C语言
c语言 指针的地址操作符 *
a 是某个变量。 &a 是变量 a 所在的地址。 int *p=a; / / p里面装着 a 的地址。 *p 里面装着 a 的数据。 *&a 里面装着 a 的数据。 即:*&a 相当于变量 a ,既然 *&a==a, 所以 *&a 与 a 的用法一摸一样。
41 0