c语言数组(多维数组本质|步长角度理解多维数组本质)(代码片段)

韩曙亮 韩曙亮     2023-02-18     386

关键词:





一、从 步长角度 理解 多维数组本质



声明一个二维数组 ;

    // 声明一个多维数组
    int array[2][3];

二级指针 :

array + i 表示第 i 行的地址 , 整个第 i 行地址 , array 是 二级指针 ;

array + i 的步长是 一维数组 的大小 , 也就是 12 12 12 字节 ;


一级指针 :

*(array + i) 表示第 i 行的首元素地址 , *二级指针 是 一级指针 ;

*(array + i) 使用 * 取出来的是 一级指针变量 , 这个 一级指针变量 就是 一维数组 , 该变量是 数组首地址 , 每次增加的步长是 数组元素的大小 , 该数组元素类型是 int 类型 , 步长 4 4 4 字节 ;


一维数组的某个元素 :

*(array + i) + j 表示第 i 行的第 j 个元素的地址 , 是一个元素的地址 , 等同于 &array[i][j] ;

上面的 j 的步长是 每个 int 类型的大小 , 4 4 4 字节 ;


二维数组 , 第一行地址 与 第一行首元素地址 值相同 ;


数组首元素地址 和 数组地址 :

  • array 表示 数组首元素地址 , 每次累加步长 , 是 数组元素的内存大小 ; ( 常用 )
  • &array 表示 数组地址 , 每次累加步长是 整个数组的内存大小 ; ( 这种情况不常用 )




二、代码示例



代码示例 :

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

/**
 * @brief main 多维数组名本质
 * @return
 */
int main()

    // 声明一个 二维数组
    int array[2][3];

    // 二维数组首元素地址 , 每次 + 1 步长是 12 字节
    printf("array = %d, array + 1 = %d\\n", array, array + 1);

    // *(array) 是二维数组首元素 , 取出来是 一维数组
    // *(array) + 1 是 一维数组 首元素地址 + 1 , 每次增加 4 字节
    printf("*(array) = %d, *(array) + 1 = %d\\n", *(array), *(array) + 1);

    // array + 1 是二维数组的第二个元素地址 , *(array + 1) 是第二个元素的值 是 一维数组
    // *(array + 1) + 1 是一维数组 首地址 + 1 , 增加了一个数组元素 , 步长增加 4 字节
    printf("*(array + 1) = %d, *(array + 1) + 1 = %d\\n", *(array + 1), *(array + 1) + 1);

    // 命令行不要退出
    system("pause");
    return 0;

执行结果 :

array = 6422200, array + 1 = 6422212
*(array) = 6422200, *(array) + 1 = 6422204
*(array + 1) = 6422212, *(array + 1) + 1 = 6422216
请按任意键继续. . .

c之多维数组和多维指针(三十一)

       我们在之前讲到过指针的本质是变量,当然指针也就会占用一定的内存空间。我们便可以定义指针的指针来保存指针变量的地址值啦,这便是我们所说的二维指针啦。      &nb... 查看详情

c语言基础:c中数组详解(多维数组传递数组给函数从函数返回数组指向数组的指针)(代码片段)

01:C语言基础:数组(声明数组、初始化数组、访问数组元素)02:C语言基础:C中数组详解(多维数组、传递数组给函数、从函数返回数组、指向数组的指针)1.C中数组详解在C中,数组是非常... 查看详情

c语言数组与指针操作(数组符号[]与指针*符号的联系与区别|数组符号[]与指针*符号使用效果基本等价|数组首地址与指针本质区别)(代码片段)

...果基本等价二、数组首地址与指针本质区别前言参考【C语言】指针与数组(指针|数组|指针运算|数组访问方式|字符串|指针数组|数组指针|多维数组|多维指针|数组参数|函数指针|复杂指针解读)博客,进行理解;一、数组符号[]与指针... 查看详情

025.多维数组

一维数组和二维数组其实并没有本质的区别.但是在不同的场合下,二维数组表达更加形象化.姓名分数A98B97C99D98二维数组#include<stdio.h>#include<stdlib.h>voidmain(){intl_v1[4][2]={{‘A‘,98},{‘B‘,97},{‘C‘,99},{‘D‘,98}};for(size_ti=0;i<... 查看详情

c语言指针数据类型(指针步长|复杂指针阅读技巧)(代码片段)

...构;二、复杂指针阅读技巧如果遇到复杂指针类型,参考【C语言】指针与数组(指针|数组|指针运算|数组访问方式|字符串|指针数组|数组指针|多维数组|多维指针|数组参数|函数指针|复杂指针解读)3.解读复杂的指针声明(难点重点|①... 查看详情

基本语法和数组(二维,多维,交错数组)

classProgram{staticvoidMain(string[]args){//TestJiaoCuo();Console.ReadKey();}//交错数组.staticvoidTestJiaoCuo(){//交错数组.交错数组的本质是1个1维数组只不过这个1维数组的元素又是数组,.int[][]arr=newint[3][];arr[0]=newint[3];arr[1]=newint 查看详情

多维数组

C语言中数组是元素类型相同的变量的集合,从内存角度来看是一大段连续的内存空间。在使用数组之前,一个好的习惯是通过memset函数对数组的内容进行初始化。相当于是重置内存块,这种方式和将数组初始化赋值为0是不一样... 查看详情

关于多维数组的注意事项

1、对于多维数组的理解,多维数组就是数组的数组,数组元素还是数组称之为二维数组。2、《C++Primerfifth》中提到,要想更好地理解多维数组,应该从内向外阅读定义。3、多维数组初始化时,每一行用一个花括号括起来,也可... 查看详情

多维数组和多维指针

1.指针变量在内存中会占用一定的空间2.可以定义指针来保存指针变量的地址值3.指针在本质上也是变量,对于指针也同样存在传值调用与传址调用#include <stdio.h>#include <malloc.h>int reset(char**p, int size, ... 查看详情

c语言数组(多维数组操作模型|取某个数组元素地址|取某个数组元素值)(代码片段)

文章目录一、多维数组操作模型1、取出某个数组元素地址2、取出某个数组元素值总结一、多维数组操作模型以//声明一个多维数组intarray[2][3];二维数组为例;1、取出某个数组元素地址第000行,第111列元素地址:array[0]+1:array代表... 查看详情

c指针和多维数组个人理解

//可能有误解,后面再改#include<stdlib.h>#include<stdio.h>int main(void)    int he(int *p,int n);   //函数声明    int he_1 查看详情

c语言数组(数组本质|数组长度定义|数组初始化|编译时初始化|显式初始化-重置内存)(代码片段)

文章目录一、数组本质二、数组长度定义三、数组初始化1、编译时初始化2、显式初始化(重置内存)一、数组本质数组本质:类型角度:从数组元素类型角度分析,数组是相同类型变量的有序集合;内存角度:从内存角度分析,数组是一... 查看详情

使用 jQuery 访问多维 JSON 数组中的数据

】使用jQuery访问多维JSON数组中的数据【英文标题】:AccessingdatainamultidimensionalJSONarraywithjQuery【发布时间】:2011-08-0219:33:57【问题描述】:我正在尝试研究如何访问本质上是多维JSON数组中的数据。我的jQueryAJAX请求如下所示:$("#lo... 查看详情

C语言中当二维数组和多维数组作为函数参数时[重复]

】C语言中当二维数组和多维数组作为函数参数时[重复]【英文标题】:Whentwo-dimensionalarrayandmultidimensionalarrayasfunctionparametersinClanguage[duplicate]【发布时间】:2012-12-1604:19:39【问题描述】:可能重复:HowdoIusearraysinC++?一维数组作为函... 查看详情

java基础|深入理解多维数组

重点陈述:把一维数组当成几何中的线性图形,那么二维数组就相当于是一个表格。对于二维数组的理解,我们可以看成是一维数组。其实,从数组底层的运行机制来看,其实没有多维数组。0x00、二维数组[][]:数组中的数组动... 查看详情

C多维数组中的指针地址

】C多维数组中的指针地址【英文标题】:PointeraddressinaCmultidimensionalarray【发布时间】:2011-01-0112:05:07【问题描述】:我在搞乱多维数组和指针。我一直在研究一个打印出简单数组的内容和地址的程序。这是我的数组声明:intzippo... 查看详情

创建具有未指定可变行长度的多维数组(Java)

】创建具有未指定可变行长度的多维数组(Java)【英文标题】:Creatingamultidimensionalarraywithunspecifiedvariablerowlengths(Java)【发布时间】:2014-11-0121:12:28【问题描述】:我正在尝试用多维数组做一些事情。我是Java新手,不是一个优秀... 查看详情

如何理解js多维数组

聪明的同学很快就会意识到如果创建多维数组了也就是说数组的创建需要一层一层制定下去不可以越级越级就会报错如果需要创建数组可以通过嵌套的for循环来弄。参考技术A外层数组中的元素也是一个数组。 参考技术Bjson["n... 查看详情