【C 语言】二级指针作为输入 ( 二维数组 | 二维数组内存大小计算 | 指针跳转步长问题 )
【摘要】
文章目录
一、二维数组内存大小计算二、二维数组内存大小意义
一、二维数组内存大小计算
给定一个二维数组 : 该 二维数组 中有
...
一、二维数组内存大小计算
给定一个二维数组 : 该 二维数组 中有 4 4 4 个 一维数组 , 每个一维数组有 10 10 10 个 char
数据 ;
// I. 二维数组
char array[4][10] = {"abc", "123", "258", "sfd"};
- 1
- 2
计算二维数组大小 : 40 40 40 字节 ;
// 求二维数组总的内存大小
int array_len = sizeof(array);
- 1
- 2
计算一维数组大小 : 该 二维数组 中有 4 4 4 个 一维数组 , 每个一维数组有 10 10 10 字节 ;
// 求二维数组中的一位数组的内存大小
int array_0_len = sizeof(array[0]);
- 1
- 2
计算二维数组中有多少个一维数组 : 4 4 4 个 ;
// 求二维数组中一维数组个数
int len = sizeof(array) / sizeof(array[0]);
- 1
- 2
代码示例 :
#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;
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
执行结果 :
二、二维数组内存大小意义
编译器操作 二维数组 时 , 只关心 二维数组 的整体内存结构 , 下面的二维数组 有 4 4 4 行 10 10 10 列 ;
// I. 二维数组
char array[4][10] = {"abc", "123", "258", "sfd"};
- 1
- 2
当使用数组下标进行遍历时 ,
array[2]
- 1
相当于
*(array + 2)
- 1
由此可以看出 , array
的每个 跳转步长 是 10 10 10 字节 , array + 2
相当于跳了 20 20 20 字节 , 才能访问到第 3 3 3 个元素 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;
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
文章来源: hanshuliang.blog.csdn.net,作者:韩曙亮,版权归原作者所有,如需转载,请联系作者。
原文链接:hanshuliang.blog.csdn.net/article/details/121569090
【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)