首页
学习
活动
专区
工具
TVP
发布

C 语言数组 ( 多维数组本质 | 步长角度 理解 多维数组本质 )

文章目录 一、从 步长角度 理解 多维数组本质 二、代码示例 一、从 步长角度 理解 多维数组本质 ---- 声明一个二维数组 ; // 声明一个多维数组 int array[2][3]...; 二级指针 : array + i 表示第 i 行地址 , 整个第 i 行地址 , array 是 二级指针 ; array + i 步长是 一维数组 大小 , 也就是 12 字节 ; 一级指针...数组地址 , 每次增加步长是 数组元素大小 , 该数组元素类型是 int 类型 , 步长 4 字节 ; 一维数组某个元素 : *(array + i) + j 表示第 i 行第 j 个元素地址..., 是一个元素地址 , 等同于 &array[i][j] ; 上面的 j 步长是 每个 int 类型大小 , 4 字节 ; 二维数组 , 第一行地址 与 第一行首元素地址 值相同 ; 数组首元素地址...和 数组地址 : array 表示 数组首元素地址 , 每次累加步长 , 是 数组元素内存大小 ; ( 常用 ) &array 表示 数组地址 , 每次累加步长是 整个数组内存大小 ; ( 这种情况不常用

5.4K10
您找到你想要的搜索结果了吗?
是的
没有找到

C语言多维数组

多维数组 如果,数组维数不止一个,我们通常称为多维数组。例如,下面的声明。 int num[3][3]; 直观看起来,这是一个3行3列数组。...指向数组指针 前面我们说过,多维数组可以理解为一维数组,只不过这个一维数组每一个元素也都是数组。那么我们声明一个指向数组指针应该是下面这个样子。...int* p = &num[0][0]; //数组起始元素地址 int* p = num[0]; //数组第一行第一个元素地址 == 数组起始元素地址 这样指针指向数组以后...,在使用时候多维数组就好像被压扁了一样,变成了一维数组。...多维数组做函数参数 实际上,多维数组做函数参数和一维数组并没有什么区别。实际传递给函数是指向数组起始元素指针,只不过这个指针在多维数组这里变成了数组指针。

56410

C 语言数组 ( 数组相关地址 | 数组首元素地址 | 数组地址 )

文章目录 一、数组相关地址 1、数组首元素地址 2、数组地址 二、代码示例 一、数组相关地址 ---- 数组首元素地址数组地址 值相等 ; int array[10]; 其中 array + 1...值是 array 地址 加上 4 字节 ; 其中 &array + 1 值是 array 地址 加上 40 字节 ; 1、数组首元素地址 数组首元素地址 : 数组名 , 就是 数组元素首地址..., 该值 是一个常量 , 不能被修改 , 一定程度上 等同于 常量指针 ; 数组名 常量 : 变量 本质 是 内存空间别名 , 一旦变量被声明 , 就必须为该变量分配对应内存 , 内存一旦分配 , 就是固定...; 如 : 在函数中定义 如下 局部变量 , 该数组一旦声明 , 就可以知道这是一个 40 字节内存 , 已经在 栈内存分配完毕 , 数组地址肯定就不能修改了 ; int array[10];...2、数组地址 数组地址 : 下面的数组张红 ,&array 是数组地址 ; int array[10]; 二、代码示例 ---- 代码示例 : #include #include

8.5K20

C 语言数组 ( 多维数组操作模型 | 取某个数组元素地址 | 取某个数组元素值 )

文章目录 一、多维数组操作模型 1、取出某个数组元素地址 2、取出某个数组元素值 总结 一、多维数组操作模型 ---- 以 // 声明一个多维数组 int array[2][3]; 二维数组为例..., 数组名是数组首元素地址 , 数组名 + 1 就是第 1 个元素地址 ; *array + 1 : array 是 二维数组首元素地址 , *array 是二维数组第 0 个元素值 ,...行 , 第 1 列 元素变量 , 取地址 , 就是取该变量地址 , 也就是 第 0 行 , 第 1 列元素地址 ; 第 i 行 , 第 j 列 元素地址 : array[i]...+ j : array 代表 二维数组首元素地址 , array[i] 是二维数组第 i 元素值 , 该值是 一维数组 , 数组名是数组首元素地址 , 数组名 + j 就是第 j 个元素地址...元素变量 , 取地址 , 就是取该变量地址 , 也就是 第 i 行 , 第 j 列元素地址 ; 2、取出某个数组元素值 取出某个元素值 , 就是在上面的 " 第 i 行 , 第 j

6K10

【嵌入式开发】C语言 指针数组 多维数组

地址算数运算示例 指针算数运算 : int *p, array[5]; p = array; p 指向一个 int 数组元素, p + i 地址数组中第 i 个元素地址, 即 p + i 指向 第..., 当分配内存时候, 通过计算 数组地址 + 数组长度 - 偏移量 >= 分配大小 , 成立的话就可以分配内存, 分配内存就是将偏移量 加上 分配大小; 释放内存时候, 就将偏移量 指向 释放内存指针地址...结果是可用内存量, 如果可用内存大于n, 则可以赋值; -- 如果内存不足 : 内存不足, 将0作为地址返回, C语言中设定 0 不是有效数据地址, 0地址数据为NULL, 返回0表示发生了异常事件...c, 没有经过字符串复制; -- 区别 : 数组 - array 指向地址不能改变, 单个字符可以修改; 指针 - c 指向字符串常量, 可以被修改指向其它地址, 修改字符串内容没有意义, 这样会在创建一个字符串常量...多维数组案例 日期转程序需求 : 将某月 某日 转换成 一年中 第多少天, 反之 将某天转换成 某年 某月某日; -- 月日转天 : 如 5月1日 是某一年第几天, 注 闰年 与 非闰年不同; -

89260

C++:数组多维数组

参考链接: C++多维数组 一、什么是数组  数组与vector类似,可以储存固定大小、类型相同顺序集合,但是在性能和灵活性权衡上与vector不同。...使用取地址符来获取指向某个对象指针。对数组使用取地址符,就能得到指向该元素指针。...(1)C标准库string函数  下面列举了C语言标准库提供一组函数,他们呗定义在cstring头文件中。   ...2-4下标范围内元素给vector对象 vector ivec(ia + 2, ia + 4);            //数组对象指向下标0位置,直接递增即可  六、多维数组  C++当中并没有多维数组...(4)指针和多维数组  当程序使用多维数组名字时,也会自动将其转换成指向数组首元素指针。

1.9K30

C语言多维数组与指针-学习二十四

数组名作函数参数 用数组名作函数参数时,因为实参数组名代表该数组首元素地址,形参应该是一个指针变量。 C编译都是将形参数组名作为变量来处理。 实参数组名是指针常量,但形参数组名是按指针变量处理。...在函数调用进行虚实结合后,它值就是实参数组首元素地址。 在函数执行期间,形参数组可以再被赋值。...C语言中定义二维数组可以看作是一个一维数组,而这个一维数组每个元素又是一个一维数组。 从二维数组角度来看,a是二维数组名,a代表整个二维数组地址,也是二维数组0行地址,等于1000。...a+1 代表第一行地址,等于1008。a+i 第i行首地址为: a+i×4×2。 数组名可以代表数组地址,所以 a[0] 代表0行0列地址,即 &a0 。...一维数组名可以作为函数参数传递,多维数组名也可以作为函数参数传递。

37220

C 语言数组教程:定义、访问、修改、循环遍历及多维数组解析

C 数组 数组用于将多个值存储在单个变量中,而不是为每个值声明单独变量。 要创建数组,请定义数据类型(例如 int)并指定数组名称,后面跟着方括号 []。...myNumbers) / sizeof(myNumbers[0]); int i; for (i = 0; i < length; i++) { printf("%d\n", myNumbers[i]); } C...多维数组 数组,也称为单维数组。...这些非常棒,是您在 C 语言编程中会经常使用东西。然而,如果您想要将数据存储为表格形式,例如带有行和列表格,则需要熟悉多维数组多维数组本质上是数组数组数组可以具有任何数量维度。...6, 8} }; matrix[0][0] = 9; printf("%d", matrix[0][0]); // 现在输出 9 而不是 1 循环遍历二维数组 要循环遍历多维数组,您需要为数组每个维度设置一个循环

54720

C#中多维数组和交错数组

C#中有多维数组和交错数组,两者有什么区别呢! 直白些,多维数组每一行都是固定,交错数组每一行可以有不同大小。...在这个意义上,C++和Java中多维数组起始相当于C#中交错数组,要使用多维数组,只需要保证每个维度长度是相等就OK了!...因为m×n矩阵这样多维数组比较常用,感觉C#中对两个进行了区分,提供了一些便利!...还有要注意C#中数组也是一种类型(C++中不是,比如C++中函数返回值不能是数组,感觉C++中数组更像是一个指针)!...说明: 多维数组声明采用int[,]这样方式 获取多维数组第i维长度用数组名.GetLength(i)方法 例如:获取二维数组行:matrix.GetLength(0);获取二维数组

2.8K20

C语言数组名取地址

大家好,又见面了,我是全栈君,祝每个程序员都可以多学几门语言。 作者 : 卿笃军 你有没有想过,对一个一维数组名取地址,然后用这个地址进行加减运算。这会出现什么样结果呢?...答:a是一个一维数组名字,&a相当于一个指向一维数组指针。怎么感觉这么熟悉?指向数组指针,那不就是行指针吗?int (*p)[]。...答:上面不是说了嘛,&a就是一个行指针,那就是指向一行指针咯。...行指针+1,不就指向下一行了,这里一行为[5]个,那么int *p = (int *)(&a+1)就要在a基础上偏离5个位置:(例如以下:上一行表示偏离位数,下一行表示a[]中相应数据) 0 1...移动五位都跑出a[]数组处于’ * ‘号位置了。哦,我看到printf()输出了。你输出是*(p-1),这里p是一个单指针-1就是往左位移一位即可了,那不就是又回到5位置了吗?

1.6K20

C多级指针与多维数组

下面,我们来探究怎样使用指针访问数组。 使用第一个元素获取数组地址 既然数组元素在内存中存储可以保证是连续,那么第一个元素地址,就是整个数组地址。...使用指针访问数组等价于下标访问 现在我们学会了访问数组元素两种办法: 数组名下标 *(数组名 + 偏移量) 其中,偏移量就是指针指向地址数组地址之间相差几个元素。...char * 可以提供单个单个操作内存能力。 在C语言中 void *类型不但可以接受任意类型指针,也可以自动转换为任意类型指针。...但在C++中,规则稍微严格了一点, void 仅能接受任意类型指针,不能自动转换为其他类型指针。为了保证代码兼容性,我们将 void 强制转为 char * ,避免在C++中编译出错。...多维数组名与指针 图片 数组指针移动 #include int main() { int b[5][10] = { {0,1,2,3,4,5,6,7,8,9}, {10,11,12,13,14,15,16,17,18,19

87900

C 语言数组 ( 多维数组本质 | n 维数组名称本质 是 n-1 级数组指针 )

[2][3]; 打印二维数组 , 打印 array 和 array + 1 值 , array 是数组首元素地址 ; 打印结果是 array = 6422188, array + 1 = 6422200...// 打印 array 和 array + 1 值 , array 是数组首元素地址 // array = 6422188, array + 1 = 6422200 , 往后跳了 12 字节...; 二维数组总大小是 24 字节 , 这是跳转了一个二维数组大小 ; // 打印 &array 和 &array + 1 值 , &array 是数组地址 // &array =...; // 用于给 多维数组 赋值时累加索引值 int index = 1; // 给多维数组赋值 for(i = 0; i < 2; i++) {...+ 1 值 , &array 是数组地址 // &array = 6422188, &array + 1 = 6422212 , 往后跳了 24 字节 // 二维数组总大小是 24

71920

C 语言】指针 与 数组 ( 指针 | 数组 | 指针运算 | 数组访问方式 | 字符串 | 指针数组 | 数组指针 | 多维数组 | 多维指针 | 数组参数 | 函数指针 | 复杂指针解读)

【嵌入式开发】C语言 指针数组 多维数组 2.【嵌入式开发】C语言 命令行参数 函数指针 gdb调试 3.【嵌入式开发】C语言 结构体相关 函数 指针 数组 4....【C语言C 语言 关键字分析 ( 属性关键字 | 常量关键字 | 结构体关键字 | 联合体关键字 | 枚举关键字 | 命名关键字 | 杂项关键字) 6....【C 语言】指针 与 数组 ( 指针 | 数组 | 指针运算 | 数组访问方式 | 字符串 | 指针数组 | 数组指针 | 多维数组 | 多维指针 | 数组参数 | 函数指针 | 复杂指针解读) 文章目录...: C语言中没有二维数组改变, 编译器 都按照一维数组来处理, 数组大小在编译时就确定了 ; 2.二维数组由来 : C 语言数组元素可以是任何类型, 即可以是一维数组, 这样就产生了二维数组...数组参数退化为指针参数意义 ( 1 ) 数组参数退化相关概念 ( 指针退化成数组 ) 一维数组参数退化为指针 : 1.C语言拷贝方式 : C 语言中只会以 传值拷贝 方式来传递参数 ;

3.5K30

多维数组理解

要清楚理解多维数组,需要先理解指针算术运算和数组含义。...2、多维数组名字理解     对于数组名大家都知道可以理解为指针,可究竟这个指针指向内容是什么呢?...5],c[4][5]};而a,b,c为三个4行5列二维数组a[4][5]={{1,2,3,4,5},{6,7,8,9,10},{11,12,13,14,15},{16,17,18,19,20}};                                      ...3、用数组名作为一维指针去操作多维数组     其实多维数组只是为了方便程序员编程,而设定,在内存中多维数组就是一个一维数组,它是按照从左到右一个元素一个元素线性排列,如上述num数组元素就是按照从...使用时需要先找到多维数组中第一个元素地址,然后将其赋值给一维指针,如int *p=&num[0][0][0];或int *p=num[0][0]; #include using namespace

2.3K100
领券