찾다

 >  Q&A  >  본문

c++ - 函数的返回值是二位数组,怎么写

 char str[100][60] = {0};// 全局变量

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

返回值部分怎么写?

PHPzPHPz2807일 전549

모든 응답(4)나는 대답할 것이다

  • 黄舟

    黄舟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代码,就是修改返回值的类型或是强制类型转换。

    회신하다
    0
  • PHP中文网

    PHP中文网2017-04-17 13:54:12

    记得返回char**的同时让调用方知道数组的长度,因为char[]退化成char*时失去了数组的长度信息,建议在参数里加上一个 int* 表长度。

    회신하다
    0
  • 迷茫

    迷茫2017-04-17 13:54:12

    按照楼上的做法比较好:

    char** func(int* size1, int* size2) {}

    회신하다
    0
  • 黄舟

    黄舟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;   
    }

    示例很粗糙,实际就是得返回堆上创建的对象,不能是栈上的。

    회신하다
    0
  • 취소회신하다