注册 登录
编程论坛 C语言论坛

请教: 关于返回指针数组的指针的问题

东南风 发布于 2021-05-31 16:53, 1101 次点击
请问第2种写法为什么是错误的, 只能用第1种写法吗? 谢谢!
NO.1
程序代码:
#include <stdio.h>
char** name(int *pn)
{
    static char* a[] =
    {
        "Jan","Feb","Mar","Apr","May","Jun","Juy"
    };
    *pn = sizeof(a) / sizeof(a[0]);
    return a;
}

void main()
{
    int pn;
    char** p;
    p = name(&pn);
    while(pn-->0)
        printf("%s\n",*p++ );
}


No.2
程序代码:
#include <stdio.h>
char(*name(int* pn))[]
{
    static char* a[] =
    {
        "Jan","Feb","Mar","Apr","May","Jun","Juy"
    };
    *pn = sizeof(a) / sizeof(a[0]);
    return a;
}

void main()
{
    int pn;
    char (*p)[];
    p = name(&pn);
    while (pn-- > 0)
        printf("%s\n", *p++);
}
2 回复
#2
rjsp2021-05-31 17:06
你只能返回数组的地址(或首元素的地址),不能返回一个数组。
因为C/C++中不允许数组复制,免得不小心影响性能。

另外,换个正儿八经的编译器,免得错误的语法也能编译通过
程序代码:
#include <stdio.h>

const char** names( size_t* psize )
{
    static const char* a[] = {
        "Jan","Feb","Mar","Apr","May","Jun","Juy"
    };
    *psize = sizeof(a) / sizeof(a[0]);
    return a;
}

int main( void )
{
    size_t size;
    const char** p = names( &size );
    for( size_t i=0; i!=size; ++i )
        puts( p[i] );
}
#3
东南风2021-05-31 20:15
回复 2楼 rjsp
谢谢, 用的是vs2019
1