【C/C++】二維數組的傳參的方法/二維字符數組的聲明,使用,輸入,傳參


【問題】
定義了一個子函數,傳參的內容是一個二維數組

編譯提示錯誤
因為多維數組作為形參傳入時,必須聲明除第一位維外的確定值,否則系統無法編譯(算不出偏移地址)

【二維數組的傳參】
方法一:形參為二維數組,並給出第二維長度
舉例:

#include <stdio.h>
 
void subfun(int n, char subargs[][5])
{
    int i;
    for (i = 0; i < n; i++) {
    	printf("subargs[%d] = %s\n", i, subargs[i]);
    }
}
 
void main()
{
    char args[][5] = {"abc", "def", "ghi"};
    subfun(3, args);
}

方法二:形參作為指向數組的指針並給出數組長度

#include <stdio.h>
 
void subfun(int n, char (*subargs)[5])
{
    int i;
    for (i = 0; i < n; i++) {
    	printf("subargs[%d] = %s\n", i, subargs[i]);
    }
}
 
void main()
{
    char args[][5] = {"abc", "cde", "ghi"};
    subfun(3, args);
}

我用了這個方法:

方法三:形參為指針的指針
實參必須有指針,不能為數組名

#include <stdio.h>
 
void subfun(int n, char **subargs)
{
    int i; 
    for (i = 0; i < n; i++) {
    	printf("subargs[%d] = %s\n", i, subargs[i]);
    }
}
 
void main()
{
    //char* a[3]是一個指針,a[0]存儲的是args[0][0]的地址,a[1]存儲的是args[1][0]的地址,a[2]存儲的是args[2][0]的地址。
    char *a[3];
    char args[][5] = {"abc", "def", "ghi"};
    a[0] = args[0];  //equals with a[0] = &args[0][0];
    a[1] = args[1];
    a[2] = args[2];
    subfun(3, a);  //若此處為subfun(3, args);則會編譯出錯
//a的值是a[0]的地址,所以a = &args[0];
}

上述代碼等價於下面代碼。

#include <stdio.h>
 
void subfun(int n, char **subargs)
{
    int i; 
    for (i = 0; i < n; i++) {
    	printf("subargs[%d] = %s\n", i, subargs[i]);
    }
}
 
void main()
{
    char *args[] = {"abc", "def", "ghi"};//equals with char *args[3] = {"abc", "def", "ghi"};
    subfun(3, args);
}

【總結】二維字符數組的創建和引用的最佳方法
傳參,輸出:

聲明還是這樣比較易懂:

上述的第三種方法我還是不太會

【參考資料】
C/C++二維數組傳參方法總結 https://blog.csdn.net/gqb_driver/article/details/8886687


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM