| |
|
开发:
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语言二维数组和多维数组的概念 -> 正文阅读 |
|
[C++知识库]C语言二维数组和多维数组的概念 |
一、回顾二维数组和多维数组的概念 int a[3][4];? //二维数组 int a[2][3]4];? //多维数组 二、指向多维数组的指针和指针变量的探究 可以把a看成是一个一维数组,这个一维数组有三个元素:a[0],a[1],a[2],每个元素又是一个包含4个元素的一维数组。 (1)a:二维数组名,也是整个二维数组的首地址。我们可以认为是第0行的首地址是1000 int a[3][4];? ?//数组名a,同样代表数组的首地址 int *p; p=(int *)a;? ?//强制类型转换 (2)a+1,a+2 分别代表 第一行首地址 和第二行首地址。所以a+1跳过16个字节的,也就是a=1000,a+1=1016,a+2=1032 (3)这表示a[0],a[1],a[2]是一维数组名。C语言规定数组名代表数组的首地址,所以就有如下: a[0] == &a[0][0]? == 1000? 是第0行元素首地址 a[1] == &a[1][0]? == 1016? 是第1行元素首地址 a[2] == &a[2][0]? == 1032? 是第2行元素首地址 (4)第0行第1列元素地址怎么表示 &a[0][1] 等价于 a[0]+1? ?--> 1004 ? ? ? ? ? ?? (5)推论:a[0] 等价于 *a;都是地址 1000? ?//a[0]==a[0][0],a是数组首地址 a[0]+1 等价于 (*a)+1? ?等价于 &a[0][1]?===> 1004 a[1]? ?等价于 *(a+1)? ?等价于 &a[1][0] ===>? 1016 a[1]+2 等价于 *(a+1)+2 等价于 &a[1][2] ===> 1024 注意:这里不要把?*(a+1)+2 写成 *(a+3) 这样就变成了 a[3]; (6)a[0]+1 等价于 *a+1,等价于 &a[0][1],==> 1004,这是个地址。 ? ?*(a[0]+1) 代表是 a[0][1] 的值;*(*a+1) 也是 a[0][1] 的值; ? ?*(a[1]+2)?代表是 a[1][2] 的值;*(*(a+1)+2) 也是 a[1][2] 的值; (7)a[i]的性质问题 ? ?a[i] 和 &a[i]地址值是一样的 实践:
三、指针数组和数组指针 1)指针数组:和普通指针变量一样,用来指向别的变量(保存变量的地址) 首先这是个数组,数组中有10个元素,每个元素都是个指针,所以这相当于定义了10个指针变量也就是p[0]-p[9] int *p[10];? ?//相当于定义了10指针变量,能引用的下标是[0][9]
2)数组指针:数组指针不太好理解,用的不多,熟悉概念就行【 数组指针的意思即为通过指针引用数组】 int (*p)[10];? ?//只定义了1个指针变量,这个指针变量是用来指向(保存) 含有10个元素的一维数组 例题1:
数组的指针:是一个指针,指向数组的指针。 然后,需要明确一个优先级顺序:()>[]>*,所以: (*p)[n]:根据优先级,先看括号内,则p是一个指针,这个指针指向一个一维数组,数组长度为n,这是“数组的指针”,即数组指针; 其次,对于语句“int(*p2)[5]”,“()”的优先级比“[]”高,“*”号和 p2 构成一个指针的定义,指针变量名为 p2,而 int 修饰的是数组的内容,即数组的每个元素。也就是说,p2 是一个指针,它指向一个包含 5 个 int 类型数据的数组,如图 2 所示。很显然,它是一个数组指针,数组在这里并没有名字,是个匿名数组。 由此可见,对指针数组来说,首先它是一个数组,数组的元素都是指针,也就是说该数组存储的是指针,数组占多少个字节由数组本身决定;而对数组指针来说,首先它是一个指针,它指向一个数组,也就是说它是指向数组的指针,在 32 位系统下永远占 4 字节,至于它指向的数组占多少字节,这个不能够确定,要看具体情况。 数组指针也称指向一维数组的指针,所以数组指针也称行指针。 最后,从上文来看: ? ? ?数组指针是一个指针变量,占有内存中一个指针的存储空间; 指针数组是多个指针变量,以数组的形式存储在内存中,占有多个指针的存储空间。 例题2: 例题3:? 例题4:
四、多维数组的指针做函数参数 |
|
C++知识库 最新文章 |
【C++】友元、嵌套类、异常、RTTI、类型转换 |
通讯录的思路与实现(C语言) |
C++PrimerPlus 第七章 函数-C++的编程模块( |
Problem C: 算法9-9~9-12:平衡二叉树的基本 |
MSVC C++ UTF-8编程 |
C++进阶 多态原理 |
简单string类c++实现 |
我的年度总结 |
【C语言】以深厚地基筑伟岸高楼-基础篇(六 |
c语言常见错误合集 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
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 9:38:54- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |