标题:请教: 关于返回指针数组的指针的问题
只看楼主
东南风
Rank: 1
等 级:新手上路
威 望:1
帖 子:19
专家分:5
注 册:2016-9-2
结帖率:100%
已结贴  问题点数:20 回复次数:2 
请教: 关于返回指针数组的指针的问题
请问第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++);
}
搜索更多相关主题的帖子: char 指针 int sizeof name 
2021-05-31 16:53
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:507
帖 子:8890
专家分:53117
注 册:2011-1-18
得分:20 
你只能返回数组的地址(或首元素的地址),不能返回一个数组。
因为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] );
}
2021-05-31 17:06
东南风
Rank: 1
等 级:新手上路
威 望:1
帖 子:19
专家分:5
注 册:2016-9-2
得分:0 
回复 2楼 rjsp
谢谢, 用的是vs2019
2021-05-31 20:15



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-505904-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.195393 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved