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

发布于 2022-09-03 00:12:15 字数 129 浏览 20 评论 0

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

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

返回值部分怎么写?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

倥絔 2022-09-10 00:12:15

你问的是返回值类型怎么写吧:

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

洛阳烟雨空心柳 2022-09-10 00:12:15

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

暗喜 2022-09-10 00:12:15

按照楼上的做法比较好:

char** func(int* size1, int* size2) {}
淡淡の花香 2022-09-10 00:12:15
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;   
}

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

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文