1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > 【C 语言】二级指针作为输入 ( 二维数组 | 二维数组内存大小计算 | 指针跳转步长问题 )

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

时间:2023-03-28 04:52:27

相关推荐

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

文章目录

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

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

给定一个二维数组 :该 二维数组 中有 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相当于跳了 20 字节 , 才能访问到第 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;}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。