【C 语言】二级指针作为输入 ( 二维数组 | 二维数组内存大小计算 | 指针跳转步长问题 )
生活随笔
收集整理的這篇文章主要介紹了
【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 相當于跳了 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 语言】二级指针作为输入 ( 二维数组 | 二维数组内存大小计算 | 指针跳转步长问题 )的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【C 语言】二级指针作为输入 ( 二维数
- 下一篇: 【C 语言】二级指针作为输入 ( 自定义