结构初始化失败

pva18
 int main()
{
    int i;
    typedef struct {
        int no[6];
        int socket;
    }data;

    data  *a = {
        a->no[6] = {0},
        a->socket= 3,
    };

    printf( "no[0] = %d\n",a->no[0]);
    printf("socket  = %d\n", a->socket);

    getchar();
    return 0;
}

在这个简单的代码中,我创建了一个结构并使用结构指针对其进行了初始化-将0值分配给数组'no'的所有元素,并将值3分配给变量套接字。我收到以下错误消息:错误C2440:“正在初始化”:无法从“初始化列表”转换为“数据*”注意:初始化器包含太多元素

我要去哪里错了?我也尝试过

    data  a = {
        a.no[6] = {0},
        a.socket= 3,
    };
  printf("no0 = %d\n",a.no[0]);
    printf("socket  = %d\n", a.socket);

此处代码正在运行,但显示a.socket = 0而不是3。

来自莫斯科的弗拉德

这个宣言

data  *a = {
    a->no[6] = {0},
    a->socket= 3,
};

没有道理。如果要声明一个指向结构的指针,则可以使用复合文字,例如

data *a = ( data[] ){ { { 0 }, 3 } };

或应动态分配数据类型的对象。

data *a = malloc( sizeof( data ) );
a->no[0] = 0;
a->socket = 3;

如果您不想声明指针,则可以按照演示程序中所示的方式编写以下内容

#include <stdio.h>

typedef struct {
    int no[6];
    int socket;
} data;

int main(void) 
{
    data a = { { [0] = 0 } , .socket = 3 };
    printf( "no0 = %d\n",a.no[0] );
    printf("socket  = %d\n", a.socket);

    return 0;
}

程序输出为

no0 = 0
socket  = 3

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章