【C 语言】二级指针作为输入 ( 二维数组 | 二维数组内存大小计算 | 指针跳转步长问题 )
文章目錄
- 一、二維數(shù)組內(nèi)存大小計算
- 二、二維數(shù)組內(nèi)存大小意義
一、二維數(shù)組內(nèi)存大小計算
給定一個二維數(shù)組 : 該 二維數(shù)組 中有 444 個 一維數(shù)組 , 每個一維數(shù)組有 101010 個 char 數(shù)據(jù) ;
// I. 二維數(shù)組char array[4][10] = {"abc", "123", "258", "sfd"};計算二維數(shù)組大小 : 404040 字節(jié) ;
// 求二維數(shù)組總的內(nèi)存大小int array_len = sizeof(array);計算一維數(shù)組大小 : 該 二維數(shù)組 中有 444 個 一維數(shù)組 , 每個一維數(shù)組有 101010 字節(jié) ;
// 求二維數(shù)組中的一位數(shù)組的內(nèi)存大小int array_0_len = sizeof(array[0]);計算二維數(shù)組中有多少個一維數(shù)組 : 444 個 ;
// 求二維數(shù)組中一維數(shù)組個數(shù)int len = sizeof(array) / sizeof(array[0]);代碼示例 :
#include <stdio.h> #include <stdlib.h> #include <string.h>int main() {// 循環(huán)控制變量int i = 0, j = 0;// 二維數(shù)組中的一維數(shù)組個數(shù)int num = 4;// 排序時 , 交換指針變量時的臨時變量 , 存儲指針指向的內(nèi)存所存儲的數(shù)據(jù)char tmp[10];// I. 二維數(shù)組char array[4][10] = {"abc", "123", "258", "sfd"};// 求二維數(shù)組總的內(nèi)存大小int array_len = sizeof(array);// 求二維數(shù)組中的一位數(shù)組的內(nèi)存大小int array_0_len = sizeof(array[0]);// 求二維數(shù)組中一維數(shù)組個數(shù)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; }執(zhí)行結(jié)果 :
二、二維數(shù)組內(nèi)存大小意義
編譯器操作 二維數(shù)組 時 , 只關(guān)心 二維數(shù)組 的整體內(nèi)存結(jié)構(gòu) , 下面的二維數(shù)組 有 444 行 101010 列 ;
// I. 二維數(shù)組char array[4][10] = {"abc", "123", "258", "sfd"};當(dāng)使用數(shù)組下標(biāo)進行遍歷時 ,
array[2]相當(dāng)于
*(array + 2)由此可以看出 , array 的每個 跳轉(zhuǎn)步長 是 101010 字節(jié) , array + 2 相當(dāng)于跳了 202020 字節(jié) , 才能訪問到第 333 個元素 array[2] ;
正是由于 上述 跳轉(zhuǎn)步長 的問題 , 在函數(shù)中 , 形參 必須是 二維數(shù)組 , 不能是 二維指針 ;
/** 此處遍歷時 , 注意指針的步長 ,* 傳入一個二級指針 char ** , 會出錯* 如果傳入 二級指針 ,* array[i] 等同于 *(array + i)* array 的步長是 10*/ int print_str(char array[4][10], int num) {// 循環(huán)控制變量int i = 0;// 判斷指針合法性if(array == NULL){printf("array == NULL\n");return -1;}// 打印二維數(shù)組中的字符串for(i = 0; i < num; i++){// 使用數(shù)組下標(biāo)形式訪問printf("%s\n", array[i]);// 使用指針訪問//printf("%s\n", *(array + i));}return 0; }總結(jié)
以上是生活随笔為你收集整理的【C 语言】二级指针作为输入 ( 二维数组 | 二维数组内存大小计算 | 指针跳转步长问题 )的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【C 语言】二级指针作为输入 ( 二维数
- 下一篇: 【C 语言】二级指针作为输入 ( 自定义