文章目录

  • 一、二维数组内存大小计算
  • 二、二维数组内存大小意义

一、二维数组内存大小计算


给定一个二维数组 : 该 二维数组 中有 444 个 一维数组 , 每个一维数组有 101010 个 char 数据 ;

    // I. 二维数组char array[4][10] = {"abc", "123", "258", "sfd"};

计算二维数组大小 : 404040 字节 ;

    // 求二维数组总的内存大小int array_len = sizeof(array);

计算一维数组大小 : 该 二维数组 中有 444 个 一维数组 , 每个一维数组有 101010 字节 ;

    // 求二维数组中的一位数组的内存大小int array_0_len = sizeof(array[0]);

计算二维数组中有多少个一维数组 : 444 个 ;

    // 求二维数组中一维数组个数int len = sizeof(array) / sizeof(array[0]);

代码示例 :

#include <stdio.h>
#include <stdlib.h>
#include <string.h>int main()
{// 循环控制变量int i = 0, j = 0;// 二维数组中的一维数组个数int num = 4;// 排序时 , 交换指针变量时的临时变量 , 存储指针指向的内存所存储的数据char tmp[10];// I. 二维数组char array[4][10] = {"abc", "123", "258", "sfd"};// 求二维数组总的内存大小int array_len = sizeof(array);// 求二维数组中的一位数组的内存大小int array_0_len = sizeof(array[0]);// 求二维数组中一维数组个数int len = sizeof(array) / sizeof(array[0]);// 打印上述大小printf("array_len = %d, array_0_len = %d, len = %d\n", array_len, array_0_len, len);// 命令行不要退出system("pause");return 0;
}

执行结果 :

二、二维数组内存大小意义


编译器操作 二维数组 时 , 只关心 二维数组 的整体内存结构 , 下面的二维数组 有 444 行 101010 列 ;

    // I. 二维数组char array[4][10] = {"abc", "123", "258", "sfd"};

当使用数组下标进行遍历时 ,

array[2]

相当于

*(array + 2)

由此可以看出 , array 的每个 跳转步长 是 101010 字节 , array + 2 相当于跳了 202020 字节 , 才能访问到第 333 个元素 array[2] ;

正是由于 上述 跳转步长 的问题 , 在函数中 , 形参 必须是 二维数组 , 不能是 二维指针 ;

/** 此处遍历时 , 注意指针的步长 ,* 传入一个二级指针 char ** , 会出错* 如果传入 二级指针 ,* array[i] 等同于 *(array + i)* array 的步长是 10*/
int print_str(char array[4][10], int num)
{// 循环控制变量int i = 0;// 判断指针合法性if(array == NULL){printf("array == NULL\n");return -1;}// 打印二维数组中的字符串for(i = 0; i < num; i++){// 使用数组下标形式访问printf("%s\n", array[i]);// 使用指针访问//printf("%s\n", *(array + i));}return 0;
}

【C 语言】二级指针作为输入 ( 二维数组 | 二维数组内存大小计算 | 指针跳转步长问题 )相关推荐

  1. 【C语言】指针:输入某一年的第几天,计算并输出它是这一年的第几月第几天

    #include <stdio.h> #include <stdlib.h>void MonthDay(int year, int yearDay, int *pMonth, ...

  2. java语言中 说明或声明数组时内存大小,说明或声明数组时不分配内存大小,创建数组时分配内存大小。...

    试井过程中每一实测的压力.说明产量都不随时间变化的叫(). 或声学制具体规定着() 明数义务教育的主要特点() 组时组<中华人民共和国义务教育法>是哪一年颁布的?() 现代社会的迅速变化, ...

  3. 【C 语言】二级指针 内存模型图 ( 指针数组 | 二维数组 | 自定义二级指针内存 )

    文章目录 前言 一.指针数组 二.二维数组 三.自定义二维指针内存 前言 绘制如下 333 种二级指针的内存模型 : // I. 指针数组 char *p1 []= {"12", ...

  4. 【C 语言】数组 ( 数组本质 | 数组长度定义 | 数组初始化 | 编译时初始化 | 显式初始化 - 重置内存 )

    文章目录 一.数组本质 二.数组长度定义 三.数组初始化 1.编译时初始化 2.显式初始化 ( 重置内存 ) 一.数组本质 数组本质 : 类型角度 : 从 数组元素 类型角度分析 , 数组是 相同类型 ...

  5. 【C 语言】二级指针作为输入 ( 自定义二级指针内存 | 为 二级指针 分配内存 - 存放 一维指针 | 为每个 一级指针 分配内存 | 释放二维指针内存 )

    文章目录 一.二级指针 1.为 二维指针 分配内存 2.为每个 一维指针 分配内存 3.释放 二维指针 内存 二.完整代码示例 一.二级指针 声明二级指针 : // 声明二维指针char **p = ...

  6. 【C 语言】二级指针作为输入 ( 二维数组 | 二维数组遍历 | 二维数组排序 )

    文章目录 一.二维数组 1.二维数组声明及初始化 2.二维数组遍历 3.二维数组排序 二.完整代码示例 一.二维数组 前几篇博客中 , 介绍的是指针数组 ; 指针数组 的 结构特征 是 , 数组中的每 ...

  7. 指针:C语言二级指针与二维数组

    前言   最近用C语言写LeetCode 有的题目给的函数把二维数组用二级指针传进来 并传入行数和列数 引起一些疑惑 本来以为C语言学得海星,查了一些资料后,觉得自己还是个弟弟 : (   按一维数组 ...

  8. 【C 语言】二级指针内存模型 ( 指针数组 | 二维数组 | 自定义二级指针 | 将 一、二 模型数据拷贝到 三 模型中 并 排序 )

    文章目录 一.指针数组 和 二维数组 数据 拷贝到 自定义二级指针 中 1.函数形参 设计规则 2.三种内存模型 对应 函数形参 指针退化规则 二.完整代码示例 一.指针数组 和 二维数组 数据 拷贝 ...

  9. 【C 语言】二级指针作为输入 ( 自定义二级指针内存 | 二级指针排序 | 通过 交换指针指向的内存数据 方式进行排序 )

    文章目录 一.二维指针 排序 ( 通过 交换指针指向的内存数据 方式进行排序 ) 二.完整代码示例 一.二维指针 排序 ( 通过 交换指针指向的内存数据 方式进行排序 ) 在上一篇博客 [C 语言]二 ...

最新文章

  1. 03-2 BGP专有命令--BGP命令与配置手册
  2. java8编译_为什么在Java7中编译而在Java8中编译?
  3. SM37 job状态意义
  4. C++ Primer Plus第二章课后编程答案
  5. Mongodb系列:初识Mongodb
  6. 给Eclipse在线安装WTP
  7. Eclipse+CDT+MinGW 配置 C/C++ 开发环境
  8. leetcode刷题日记-846. 一手顺子
  9. DOT HERE AGAIN
  10. 康华光电子技术基础第六版习题答案
  11. GB35114视频流处理
  12. 关于cuda驱动版本以及cuda运行版本不匹配的问题
  13. linux基本命令整理——鸟哥linux私房菜第九章
  14. 二进制转十进制c++语言数组,C++实现读入二进制数并转换为十进制输出
  15. html七天签到页面,每日前端签到(第七天)
  16. 使用Qt合并图片的算法
  17. Ubuntu 16.04下安装配置Trac项目管理工具
  18. Harris响应的一点认识
  19. 1688搜索新品API接口-(按关键字搜索新品数据API接口)
  20. 始于2015年11月23日,终于2018年08月08日

热门文章

  1. SQL PASS西雅图之行——Lake Union纪行
  2. ISelectionSet接口
  3. Javascript自定义事件功能与用法实例分析
  4. Shell命令-关机重启及注销之logout、exit
  5. 织梦gbk转utf8(数据库篇)
  6. mysql数据库授权
  7. 树形数据深度排序处理示例(递归法).sql
  8. Oracle 索引扫描的五种类型
  9. 小程序文本溢出显示省略号(单行/多行)
  10. 运行 composer update,提示 Allowed memory size of bytes exhausted