IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> 【C语言-进阶】指针进阶 -> 正文阅读

[数据结构与算法]【C语言-进阶】指针进阶

1.字符指针

字符指针的基本使用略了

把常量字符串"abcdef"的首元素地址放在字符型指针p中,p中存储的就是字符a的地址,而因为他们是在内存中连续存储的,且字符串末尾有自动添加到'\0',所以可以用printf形式打印出来。

这时如果用指针p对p所指向的对象修改,就会出现程序崩溃的情况,而在cpp文件中,我记得好像这种行为编译是无法通过的,会直接报错,所以如下,在前面加一个const,对其进行保护。

面试题(?

?常量字符串"abcdef\0"是存储在常量区的(好像名字并不是这个)(只读区),而因为这样的字符串创建了之后就无法改变(在销毁之前),所以计算机完全没有必要创建两个一模一样的字符串,所以内存中只会出现一个"abcdef\0"。而pa,pb都是存储的a的地址,所以也就一样了。

arr1,arr2 是存储在栈区的,他们是可变的,内存中就会在不同的地方创建两个相同的"zzzzzz\0";所以这两个字符串的首元素地址arr1,arr2,也就理所应当的不同了。(pa,pb指针是存储在栈区的)

2.? 指针数组?

指针数组的简单使用= =,arr就是一个指针数组,存储的是各个一维数组的首元素地址。arr数组元素类型都是int*的。图中三种取元素的方法从本质来看是相同的,因为arr[i] = *(arr+i)。 所有的正确写法计算机都会转化为图中最下面的写法。

3. 数组指针

?存储数组的地址的指针为数组指针。

p的类型是 int (*)[10]? ?pp的类型是char* (*)[10]? ?其中方块里的数字不能省略,原因:比如p++;则p将跳过40个字节,方块里的数字具有很大意义。?

针对上图的**p ,p是数组地址,解引用即得到的是arr数组,arr也同时代表着首元素地址,再解引用就是首元素,这里好像看上去像二级指针,实则不是,只是因为数组名代表着首元素地址。??

数组指针的用处.........?

上图这种当然是可以的。下面看新的?

arr是一个二维数组,arr,即首元素地址,二维数组可以看成若干个一维数组的数组,所以arr就是第一个一维数组的地址(并非第一个一维数组中首元素的地址)?,来看第一个printf函数的实现方法,arr+i ,即第i个一维数组的地址,解引用,即第i个一维数组,可以把这里看成是一维数组的数组名,所以也就是一维数组的首元素地址,再加j,就是第i个一维数组的第j个元素的地址,再解引用 ,就是第i个一维数组的第j个元素。打印出即可。

拆分是从下往上拆分的。

上图为二维数组的指针,用二维数组指针遍历二维数组,其实这个和上上图中第一个printf函数差别很小,只是此处arr是整个二维数组的地址,再解引用就是那个二维数组,此时也可以看成是那个二维数组的数组名,也就是arr数组。也代表着第一个一维数组的地址。再接着与上面的衔接上即可?

  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2022-03-06 13:22:01  更:2022-03-06 13:27:37 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 13:34:09-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码