c++ - 函数的返回值是二位数组,怎么写
PHPz
PHPz 2017-04-17 13:52:12
0
4
523
 char str[100][60] = {0};// 全局变量

char** fun( ) {
    
    ......
    return str;   
}

返回值部分怎么写?

PHPz
PHPz

学习是最好的投资!

全部回覆(4)
黄舟

你問的是回傳值類型怎麼寫:

char str[100][60];
typedef char (*str60)[60];

str60 func(){ return str;}

或:

char str[100][60];

char** func(){ return (char **)str;}

看你的要求了
原因麼,就是str的類型其實是str60,所以str[1][2]的時候編譯器才能知道存取的位址是str+60*1+2,所指向的一個位元組的數據(char型)。這個和 char** 不是同一個類型,char **裡面不包含資訊60。

所以要改成合法的C代碼,就是修改回傳值的型別或是強制型別轉換。

Ty80

記得返回char**的同時讓呼叫方知道數組的長度,因為char[]退化成char*時失去了數組的長度信息,建議在參數裡加上一個 int* 表長度。

迷茫

依照樓上的做法比較好:

char** func(int* size1, int* size2) {}
黄舟
char* fun( ) {

    char* p = str[0][0];
    // do something
    for( int i = 0;i < 100 ; ++i ) 
       for ( int j = 0; j< 60; ++j )
            *(p + 100 * i + j ) = 'a'
   
    return p;   
}

範例很粗糙,實際上就是得返回堆上建立的對象,不能是棧上的。

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板