免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 20793 | 回复: 10
打印 上一主题 下一主题

[C++] 结构体数组中结构体数组元素初始化 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2015-05-29 21:28 |只看该作者 |倒序浏览
使用已经初始化的结构体数组初始化以它为元素的结构体数组

struct node
{
        int a ;
        char str[10] ;
};

struct node array[10] = {
{1, "1"},
{2 , "2"},
};

struct  newnode
{
        struct node test[10];//只是为了说明问题,只保留了一个元素
};

struct newnode demo[10] =
{
        array ,
};

初始化后可以访问,但是并不是预期值。

如果使用 demo[0].test[0].a = 1 ;这种方式就没有问题。

这是什么原因???

论坛徽章:
0
2 [报告]
发表于 2015-05-29 21:56 |只看该作者
个人猜测可能和内存拷贝有关系,struct node test[10];使用数组指针就ok了

论坛徽章:
0
3 [报告]
发表于 2015-05-30 20:11 |只看该作者
贴一下你打印的代码

论坛徽章:
0
4 [报告]
发表于 2015-05-30 20:27 |只看该作者
再说数组本来就不能用  =  赋值

论坛徽章:
0
5 [报告]
发表于 2015-05-30 20:35 |只看该作者
struct newnode demo[10] =
{
        array ,
};

这个没有问题吗?

论坛徽章:
0
6 [报告]
发表于 2015-05-30 20:37 |只看该作者
struct newnode damo[10];
    int i;
    for (i = 0; i < 10; i++) {
        damo[0].test[i] = array[i];
    }   

论坛徽章:
0
7 [报告]
发表于 2015-05-31 11:10 |只看该作者
回复 5# tsh185


    就是这个地方有问题,把

struct  newnode
{
        struct node test[10];
};

改成:

struct  newnode
{
        struct node *test[10];
};

使用指针数组就ok了。

这个应用场景使用 for循环赋值不是很好,我需要使用已经定义的数组来初始化结构体中该类型的元素。

论坛徽章:
0
8 [报告]
发表于 2015-06-02 13:21 |只看该作者
注意到警告
warning: initialization makes integer from pointer without a cast

struct node
{
        int a ;
        char str[10] ;
};

struct  newnode
{
        struct node test[10];
};

基于上面的两个结构体,
struct newnode demo[10] =
{
        array,
};
这一句的初始化相当于
demo[0].a = (int)array;
这显然不是楼主想要的结果

论坛徽章:
0
9 [报告]
发表于 2015-06-04 22:48 |只看该作者
mymtom_cu 发表于 2015-06-02 13:21
注意到警告
warning: initialization makes integer from pointer without a cast


细节抓的很到位,分析很深刻,谢谢

论坛徽章:
0
10 [报告]
发表于 2017-09-19 19:21 |只看该作者
struct newcode *demo[10] = {
        array,
};
在demo[10]前面加*,表示数组内是结构体类型的指针
array是结构体数组,直接用数组名则表示指针,指向结构体数组的第一个元素(结构体变量)
所以在main函数中使用 demo[0]->test[0].a   打印出的是正确的值
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP