请问:如何定义返回值为多维数组(例如二维)的地址函数?

mcmay 2013-11-11 02:02:53
#define MAX 5
使用诸如char **retptr(char (*ptr)[MAX], int n);的形式对吗?例如:

char **retptr(char (*ptr)[MAX], int n)
{
...... //一些操作

return ptr;
}
我试过了,编译器没报错但有警告“...|21|warning: assignment from incompatible pointer type [enabled by default]|”。请指教应如何定义比较好。
...全文
178 9 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
lm_whales 2013-11-12
  • 打赏
  • 举报
回复
char (*)retptr(char (*ptr)[MAX], int n)[MAX]{ return ptr; } 这么处理,没问题。 #define MAX 1000 typedef char (*char_arr_ptr)[MAX]; char_arr_ptr retptr(char (*ptr)[MAX],int n){ return ptr; }
lm_whales 2013-11-12
  • 打赏
  • 举报
回复
记得好像要这么写! char (*)retptr(char (*ptr)[MAX], int n)[MAX];
还有多远 2013-11-11
  • 打赏
  • 举报
回复
引用 3 楼 mcmay 的回复:
[quote=引用 1 楼 derekrose 的回复:] ok的吧 warning而已,你run的时候有什么bug?
也没有什么bug之类的,但需要有个正式的格式吧?如果是返回多维(超过两维)那不是需要多几个星号?[/quote] 不转型你的编译器只是给的warning?我的咋报error了呢,而且static_cast<char**>也不行,都必须是reinterpret_cast<char**>

#define MAX 20
char** retptr(char (*ptr)[MAX], int n)
{
    return ptr;
}

In function 'char** retptr(char (*)[20], int)':|
error: cannot convert 'char (*)[20]' to 'char**' in return|
赵4老师 2013-11-11
  • 打赏
  • 举报
回复
仅供参考
//在堆中开辟一个3×4×5的3维int数组
#include <stdio.h>
#include <malloc.h>
int ***p;
int i,j,k;
void main() {
    p=(int ***)malloc(3*sizeof(int **));
    if (NULL==p) return;
    for (i=0;i<3;i++) {
        p[i]=(int **)malloc(4*sizeof(int *));
        if (NULL==p[i]) return;
        for (j=0;j<4;j++) {
            p[i][j]=(int *)malloc(5*sizeof(int));
            if (NULL==p[i][j]) return;
        }
    }
    for (i=0;i<3;i++) {
        for (j=0;j<4;j++) {
            for (k=0;k<5;k++) {
                p[i][j][k]=i*20+j*5+k;
            }
        }
    }
    for (i=0;i<3;i++) {
        for (j=0;j<4;j++) {
            for (k=0;k<5;k++) {
                printf(" %2d",p[i][j][k]);
            }
            printf("\n");
        }
        printf("---------------\n");
    }
    for (i=0;i<3;i++) {
        for (j=0;j<4;j++) {
            free(p[i][j]);
        }
        free(p[i]);
    }
    free(p);
}
//  0  1  2  3  4
//  5  6  7  8  9
// 10 11 12 13 14
// 15 16 17 18 19
//---------------
// 20 21 22 23 24
// 25 26 27 28 29
// 30 31 32 33 34
// 35 36 37 38 39
//---------------
// 40 41 42 43 44
// 45 46 47 48 49
// 50 51 52 53 54
// 55 56 57 58 59
//---------------
puchi 2013-11-11
  • 打赏
  • 举报
回复
你这样写 char **retptr(char **ptr, int n) 就可以了。
mcmay 2013-11-11
  • 打赏
  • 举报
回复
引用 2 楼 Ronux 的回复:
没问题,不想看到warning,可以加上强制类型转换
如何加类型转换?
mcmay 2013-11-11
  • 打赏
  • 举报
回复
引用 1 楼 derekrose 的回复:
ok的吧 warning而已,你run的时候有什么bug?
也没有什么bug之类的,但需要有个正式的格式吧?如果是返回多维(超过两维)那不是需要多几个星号?
Ronux 2013-11-11
  • 打赏
  • 举报
回复
没问题,不想看到warning,可以加上强制类型转换
derekrose 2013-11-11
  • 打赏
  • 举报
回复
ok的吧 warning而已,你run的时候有什么bug?

70,023

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧