【C 语言】二级指针作为输入 ( 二维数组 | 抽象业务函数 | 二维数组打印函数 | 二维数组排序函数 )
生活随笔
收集整理的這篇文章主要介紹了
【C 语言】二级指针作为输入 ( 二维数组 | 抽象业务函数 | 二维数组打印函数 | 二维数组排序函数 )
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
文章目錄
- 一、抽象 二維數(shù)組 業(yè)務(wù)函數(shù)
- 1、二維數(shù)組 打印函數(shù)
- 2、二維數(shù)組 排序函數(shù)
- 二、完整代碼示例
一、抽象 二維數(shù)組 業(yè)務(wù)函數(shù)
1、二維數(shù)組 打印函數(shù)
注意 , 二維數(shù)組 作為 函數(shù)參數(shù) 輸入到函數(shù)中 , 不能傳入 二維指針 ;
此處遍歷時(shí) , 注意指針的步長 ,傳入一個(gè)二級指針 char ** , 會(huì)出錯(cuò) , 如果傳入 二級指針 , array[i] 等同于 *(array + i) , array 的步長是 10 ;
這里將 函數(shù)形參 定義為 char array[4][10] ;
代碼示例 :
/** 此處遍歷時(shí) , 注意指針的步長 ,* 傳入一個(gè)二級指針 char ** , 會(huì)出錯(cuò)* 如果傳入 二級指針 ,* 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; }2、二維數(shù)組 排序函數(shù)
二維數(shù)組排序時(shí) , 也不能傳入二維指針作為形參 , 需要傳入 char array[4][10] 作為形參 ;
代碼示例 :
/** 二維數(shù)組*/ int sort_array(char array[4][10], int num) {// 循環(huán)控制變量int i = 0, j = 0;// 排序時(shí) , 交換指針變量時(shí)的臨時(shí)變量 , 存儲(chǔ)指針指向的內(nèi)存所存儲(chǔ)的數(shù)據(jù)char tmp[10];// 判斷指針合法性if(array == NULL){printf("array == NULL\n");return -1;}// 二維數(shù)組排序// 對 指針數(shù)組 進(jìn)行排序 , 排序依據(jù)是 指針 指向的數(shù)據(jù)對比for(i = 0; i < num; i++){for(j = i + 1; j < num; j++){// 核心邏輯 : 如果 array[i] 大于 array[j]// 就交換兩個(gè)元素if(strcmp(array[i], array[j]) > 0){// 交換 i, j 位置的指針指向的內(nèi)存數(shù)據(jù)strcpy(tmp, array[i]);strcpy(array[i], array[j]);strcpy(array[j], tmp);}}}return 0; }二、完整代碼示例
完整代碼示例 :
#include <stdio.h> #include <stdlib.h> #include <string.h>/** 此處遍歷時(shí) , 注意指針的步長 ,* 傳入一個(gè)二級指針 char ** , 會(huì)出錯(cuò)* 如果傳入 二級指針 ,* 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; }/** 二維數(shù)組*/ int sort_array(char array[4][10], int num) {// 循環(huán)控制變量int i = 0, j = 0;// 排序時(shí) , 交換指針變量時(shí)的臨時(shí)變量 , 存儲(chǔ)指針指向的內(nèi)存所存儲(chǔ)的數(shù)據(jù)char tmp[10];// 判斷指針合法性if(array == NULL){printf("array == NULL\n");return -1;}// 二維數(shù)組排序// 對 指針數(shù)組 進(jìn)行排序 , 排序依據(jù)是 指針 指向的數(shù)據(jù)對比for(i = 0; i < num; i++){for(j = i + 1; j < num; j++){// 核心邏輯 : 如果 array[i] 大于 array[j]// 就交換兩個(gè)元素if(strcmp(array[i], array[j]) > 0){// 交換 i, j 位置的指針指向的內(nèi)存數(shù)據(jù)strcpy(tmp, array[i]);strcpy(array[i], array[j]);strcpy(array[j], tmp);}}}return 0; }int main() {// 循環(huán)控制變量int i = 0, j = 0;// 二維數(shù)組中的一維數(shù)組個(gè)數(shù)int num = 4;// 排序時(shí) , 交換指針變量時(shí)的臨時(shí)變量 , 存儲(chǔ)指針指向的內(nèi)存所存儲(chǔ)的數(shù)據(jù)char tmp[10];// I. 二維數(shù)組char array[4][10] = {"abc", "123", "258", "sfd"};// II. 打印二維數(shù)組中的字符串print_str(array, num);// III. 二維數(shù)組排序// 對 指針數(shù)組 進(jìn)行排序 , 排序依據(jù)是 指針 指向的數(shù)據(jù)對比sort_array(array, num);// IV. 打印二維數(shù)組中的字符串printf("\nSort:\n");print_str(array, num);// 命令行不要退出system("pause");return 0; }執(zhí)行結(jié)果 :
總結(jié)
以上是生活随笔為你收集整理的【C 语言】二级指针作为输入 ( 二维数组 | 抽象业务函数 | 二维数组打印函数 | 二维数组排序函数 )的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【C 语言】二级指针作为输入 ( 二维数
- 下一篇: 【C 语言】二级指针作为输入 ( 二维数