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语言中对数组名指针的实用理解方法(A A[0] A[0][0]取地址区别) -> 正文阅读

[C++知识库]C语言中对数组名指针的实用理解方法(A A[0] A[0][0]取地址区别)

1.数组的含义、定义与初始化方式

? ? ? ? 在对数组名指针进行理解分析之前 先来看看一维数组名关于指针的性质

? ? ? ? ?我们通过编译器可以发现 arr和&arr的值相同

? ? ? ? 很明显的看出来数组名作为一种指针类型,具有相当明显的特殊性

? ? ? ? 在编译器中 无论是arr 还是 &arr 都会用$arr表示($为编译器取地址符)

? ? ? ? 即编译器会将没有添加$的编码名添加$

? ? ? ? 但添加和不添加&还是有区别的 虽然他们值相同

int main
{
	char crr[5]="hello";
	printf("%d\n",sizeof(crr));    //5
	printf("%d\n",sizeof(&crr));   //4
	printf("%d\n",strlen(arr));
	return 0;
}

? ? ? ? 数组名被定义为指向数组名的指针常量

? ? ? ? 但在以下两中场合下,数组名并不是用指针常量来表示,就是当数组名作为sizeof操作符和单目操作符&的操作数时

? ? ? ?上面这个代码块中可以看出 crr在没被添加&时作为一个真正的“数组名”,即sizeof所得到的是数组大小

? ? ? ? 但crr被添加&是被看作指向数组的指针,作为一个合格的指针比如逃不过被sizeof判定为4的命运

(值得注意的是只要数组名被运算、传参、赋值都会退化为某种类型的指针)

? ? ? ? 结论:被添加&的数组名是指向数组的指针,而没有被添加的数组名更像是数组的入口

接下来我们来看最让人头疼的二级指针

????????

A==&A==&A[0]=&A[0][1]? ? ?//其中只有A可以被看作数组入口 其他只能作为指向数组的指针;

?????????也许看着很奇怪 所有的写法都不一样但就是能走到一个地址上去

? ? ? ? 其实每个都可以解释

A

在一维数组中就解释过 作为数组的入口 被sizeof使用 其在编译器中的本质还是&A

&A

此处还是作为数组名被使用 被指向第一个一维数组的地址即 &A[0]

&A[0]

指向数组第一个一维数组首地址

&A[0][1]?

数组开头第一个元素

那此时 一维数组首地址和数组开头第一个元素不就是一个地址吗?

这只是我家在浙江和我家在温州一个道理 它们指向的是同一个地方?

但作为指针它们的类型以及发生了变化

这里教一个简便方法

对A求地址 即A或&A

则往右寻找到其最近的数组元素的地址 就是它的值 即&A[0][0];

对A[1]求地址 即 &A[1]

则往右寻找到其最近的数组元素的地址 就是它的值 即&A[1][0];

对A+2求地址 即 A+2

则往右寻找到其最近的数组元素的地址 就是它的值 即&A[2][0];

?

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2021-07-13 17:16:52  更:2021-07-13 17:17:12 
 
开发: 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/23 0:41:00-

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