char str[100][60] = {0};// 全局变量
char** fun( ) {
......
return str;
}
返回值部分怎么写?
黄舟2017-04-17 13:54:12
你問的是回傳值類型怎麼寫:
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代碼,就是修改回傳值的型別或是強制型別轉換。
PHP中文网2017-04-17 13:54:12
記得返回char**的同時讓呼叫方知道數組的長度,因為char[]退化成char*時失去了數組的長度信息,建議在參數裡加上一個 int* 表長度。
黄舟2017-04-17 13:54:12
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;
}
範例很粗糙,實際上就是得返回堆上建立的對象,不能是棧上的。