精华内容
下载资源
问答
  • 结构体数组初始化

    2019-08-26 21:53:24
    结构体数组初始化 转载自:https://blog.csdn.net/dengziliang001/article/details/8720808 2010-06-19 00:25 与诸君共进步 | 分类:其他编程语言 | 浏览4497次 struct city{ char name[20]; double population; ...

    结构体数组初始化
    转载自:https://blog.csdn.net/dengziliang001/article/details/8720808
    2010-06-19 00:25 与诸君共进步 | 分类:其他编程语言 | 浏览4497次
    struct city{
    char name[20];
    double population;
    double housing;
    double ave;
    };

    city cities[2];
    cities[0]={“A”,10000,11};
    cities[1]={“B”,20000,11};

    为什么不行啊?
    city cities[2]={{“A”,10000,11},{“B”,20000,11}}; 我知道这种赋值方法,但我就是想问问什么上面那种不行?别的数组是可以的啊

    并不是aleda所说的原因,你可以试一下,即便不要结构体不要字符串
    struct city
    {
    double population;
    double housing;
    double ave;
    };

    city cities[2];

    cities[0]={22,10000,11};
    cities[1]={22,20000,11};

    这里与结构体匹配了,但是同样不可能通过
    原因是C\C++语法是禁止结构体这样赋值的!!

    你提到了初始化,的确结构体数组初始化是可以通过大括号这种形式进行初始化的,但是一定要注意

    类似这样的语句,不是初始化,而是重新赋值!
    cities[0]={“A”,10000,11};
    cities[1]={“B”,20000,11};

    结构体数组的初始化在
    city cities[2];
    这一句的时候就完成了(初始化了cities[0]和cities[1]这两个元素)

    所以正确的初始化格式应该如下:

    city cities[2] = {{“a”, 1,1,1}, {“b”, 1,1,1}};
    // 还要注意一点,你问题处的成员少给了一个,结构体里有三个double,你只给了两

    记住一点:

    初始化永远是在定义的时候完成的,
    (或者如果是类的成员变量,其初始化是在构造函数的初始化列表中完成,如果你学的是C,可以忽略)

    非定义处的只有重新赋值,没有初始化!

    /

    补充:别的数组?那也是不行的

    展开全文
  • DATE: 2020.11.23 文章目录1、参考2、结构体数组初始化 1、参考 Problems Initializing Structures 2、结构体数组初始化

    DATE: 2020.11.23



    1、参考

    Problems Initializing Structures

    2、结构体数组初始化

    static T_Struct gTest[5] ={
    {0, 0, 0, 0, 0, 0}, 
    {0, 0, 0, 0, 0, 0}
    };

    ---------------------------------------------THE END!-----------------------------------------------------------

    展开全文
  • 背景C89标准规定初始化语句的元素以固定顺序出现,该顺序即待初始化数组或结构体元素的定义顺序。C99标准新增指定初始化(Designated Initializer),即可按照任意顺序对数组某些...1数组初始化数组初始化列表中使...

    背景

    C89标准规定初始化语句的元素以固定顺序出现,该顺序即待初始化数组或结构体元素的定义顺序。

    C99标准新增指定初始化(Designated Initializer),即可按照任意顺序对数组某些元素或结构体某些成员进行选择性初始化,只需指明它们所对应的数组下标或结构体成员名。GNU C将其作为C89模式的扩展。

    借助指定初始化特性,可实现数组或结构体元素的快速初始化。

    1数组初始化

    在数组初始化列表中使用“[index常量表达式]=value”形式可对index所指定的某个元素进行初始化。如:

    int arr[6] = { [0]=5, [1]=6, [3] =10, [4]=11 }; 或

    int arr[6] = { [0]=5, 6, [3] =10, 11 }; 或

    int arr[6] = { [3] =10, 11, [0]=5, 6 }; (指定顺序可变)

    均等效于:int arr[6] = {5, 6, 0, 10, 11, 0};

    说明:

    1) 若在某个指定初始化项目后跟有不至一个值,如[3]=10,11。则多出的数值用于对后续的数组元素进行初始化,即数值11用来初始化arr[4]。

    2) C数组初始化一个或多个元素后,未初始化的元素将被自动地初始化为0或NULL(针对指针变量)。未经过任何初始化的数组,所有元素的值都是不确定的。

    当下标是字符或属于枚举类型时,标识数组初始化语句的元素特别有用。如:

    int whitespace[256] = {

    [' '] = 1, ['\t'] = 1, ['\h'] = 1,

    ['\f'] = 1, ['\n'] = 1, ['\r'] = 1 };

    static const char* gMsgName[] = {

    [MSG_CREATE] = "Create",

    [MSG_DELETE] = "Delete",

    [MSG_SET]    = "Set",

    [MSG_GET]    = "Get",

    [MSG_GET_ALARMS] = "GetAlarms",

    [MSG_SET_TABLE]  = "SetTable"}; //枚举值变化时,数组自动同步更新

    这种初始化方式可实现简化的映射表,不过在下标指示符跨度较大时稍显浪费内存。

    GNU C还支持”[first … last]=value”(…两侧有空格)的形式,将该范围内的若干元素初始化为相同值。如:

    int arr[]={ [0 ... 3]=1, [4 ... 5]=2, [6 ... 9] =3}; 或

    int arr[]={ [0 ... 3]=1, [4 ... 5]=2, [6 ... 8] =3, [9] =3};

    均等效于:int arr[10] = {1, 1, 1, 1, 2, 2, 3, 3, 3, 3};

    注意,数组长度为指定的最大下标值加1。

    这种初始化方式比memset高效且用途更广,如:

    int arr[]={ [0 ... 127]=-1 };

    等效于:memset(arr, 0xFF, sizeof(arr));

    int arr[]={ [0 ... 127]=1 };

    不等效于:memset(arr, 1, sizeof(arr));

    2结构体初始化

    结构的指定初始化语法与数组类似,只不过使用点运算符和成员名(而不是方括号和索引值)标识具体的元素。例如,对于结构体

    struct Structure{ int a; int b; };或struct Structure{ int a, b; };

    有以下几种初始化方式:

    struct Structure tStct = {

    .a = 1,

    .b = 2

    };

    用“.fieldname=”指定待初始化成员名(成员初始化顺序可变)

    struct Structure tStct = {

    a : 1,

    b : 2

    };

    用“fieldname:”指定待初始化成员名(成员初始化顺序可变)

    GCC 2.5已废除,但仍接受

    struct Structure tStct = { 1, 2};

    内核结构体多采用第一种初始化方式,如Linux-2.6.x/drivers/usb/storage/usb.c设备驱动程序中:

    static struct usb_driver usb_storage_driver = {

    .owner = THIS_MODULE,

    .name = "usb-storage",

    .probe = storage_probe,

    .disconnect = storage_disconnect,

    .id_table = storage_usb_ids,

    };

    该方式初始化时不必严格按照定义时的顺序,灵活性很高。

    【例】定义如下结构体

    struct book{

    char title[MAXTITL];

    char author[MAXAUTL];

    float value;

    int mask[128];

    };

    可按照任意顺序使用指定初始化项目:

    struct book gift = { .value = 25.99,

    .author = "James Broadfool",

    .title = "Rue for the Toad",

    .mask[0 ... 127] = -1};

    也可只初始化结构体成员value:

    struct book surprise = { .value = 10.99 };

    正如数组一样,跟在指定初始化项目后且没有指示符(“[index]”或“fieldname”)的常规初始化项目为跟在指定成员后定义的下个成员提供初始值。此外,若对特定成员初始化多次,则最后一次赋值是它实际获得的值。

    考虑下列声明:

    struct book gift = { .value = 18.90,

    .author = "Philionna pestle",

    0.25};

    将把值0.25赋给成员value,因为它在结构体定义中紧跟在author成员之后。新值0.25覆盖前值18.90。

    若覆盖初始化有副作用(如类型不兼容),则GNU C可能会产生编译警告。

    利用指定初始化特性,可方便地编写如下的测试例程:

    AGENT_PW_PSN tPwPsn = {

    .dwSlotNo = 2,

    .dwPortNo = dwPortNo,

    .dwPsnType = TRANS_MPLS,

    .dwInBndLable = dwInBndLable,

    .dwOutBndLable = dwOutBndLable,

    .dwMplsType = MPLS_SINGLE_LABELLED,

    .dwInBndTunnelLable = 0,

    .dwOutBndTunnelLable = 0,

    .aucDstMac = {0x00,0x15,0xeb,0x72,0x00,0x0e},

    .dwVlanId = 300,

    .dwPriority = 7

    };

    OmciSetPwPsn(&tPwPsn, sizeof(tPwPsn), aucBufOut, &dwOutLen);

    3联合体初始化

    可用“.fieldname” (或已废弃的“fieldname:”)指示符来指定使用联合体的哪个元素,如:

    union UnionT { int i; double d; };

    union UnionT tUnion = { .d = 4 };

    使用第二个元素将4转换为double类型存入联合体。相反,将4转换为union UnionT类型则会把它作为整数i存入联合体。

    4结构体数组初始化

    可在“=”前写上一系列的“[index]”和“.fieldname”指示符来指定待初始化的嵌套子对象,如:

    struct Structure ptStct[10] = {

    [2].b = 0x2B, [2].a = 0x2A,

    [0].a = 0x0A };

    5 GCC扩展结构体赋值

    对于上文定义的结构体Structure可整体赋值:

    struct Structure tStct1, tStct2;

    tStct2 = tStct1;

    结构体也可作为函数返回值对另一个结构体赋值:

    struct Structure func1();

    struct Structure tStct = func1();

    展开全文
  • #include <string.h>///memset需要头文件<string.h>(c语言) 或 <cstring>(c++语言) struct node { int w1, w2, w3;...///结构体数组可以直接memset初始化 return 0; } ...

     

     

    
    #include <string.h>///memset需要头文件<string.h>(c语言) 或 <cstring>(c++语言)
    struct node
    {
        int w1, w2, w3;
        int number;
        double sum;
    }a[5005];
    
    int main()
    {
        memset(a, 0, sizeof(a));///结构体数组可以直接memset初始化
        return 0;
    }
    

     

    展开全文
  • 任务要求这是学校布置的一个 c 语言课题设计作业,任务要求如下: 用一个结构体数组存放 5 个学生 3 门课的成绩。要求建立 5 个子函数分别实现题目的5步。 1. 输入 5 个学生 3 门课的成绩存入结构体数组中; 2. 输出...
  • Linux GNU C结构体数组初始化示例

    千次阅读 2016-10-13 12:58:56
    GCC特有的数组初始化的风格: // 数组赋值另一种方式,但只在gcc下编译通过,g++不能 enum { AAA = 0, BBB, CCC, DDD, }; // 只对感兴趣的索引值进行赋值,而不管下标的顺序 static const int regs[] = { ...
  • <code>struct information{ char seat_num[LEN]; int sold; char fname[LEN]; char lname[LEN]; ...struct information info[12] =...还是对12个info数组都做了初始化?</code></pre>  </p>
  • 【结构体的存储】 1结构体整体空间是占用空间最大的成员(的类型)所占字节数的整数倍。 2.结构体的每个成员相对结构体首地址的偏移量(offset)...【结构体数组要在定义时初始化。先定义再赋初值是错误的】 错误: str
  • memset 一般使用“0”初始化内存单元,通常是给数组结构体进行初始化,或清空数组结构体。memset 函数声明为:void *memset(void *str, int c, size_t n) 其功能是将 str 中当前位置后面的 n 个字节 (typedef ...
  • # 结构体定义 class Baz(): def __init__(self, name, place): self.name = name self.place = place ## 数组 my_foos = [] my_foos.append(Baz("foo", "Shop")) my_foos.append(Baz("bar", "Home"))
  • {'Matlab'},{0}] %2×2细胞数组 ​ c=b(3) %c=b(3),c是一个小一些的细胞数组 , 得到 9 class(c) d=b{3} %d=b{3},d为uint8型整数,得到数字9 class(d) ​ A=cell(2,3)%用cell函数创建空的细胞数组 A{1}=zeros(2,2)...
  • 结构体定义形式三种: 1.间接定义 struct student { int num; char name[20]; }; struct student[2]; 2.直接定义 struct student { int num; char name[20]; }stu[2]; 3. 无名定义 struct { ...
  • C语言函数为什么不能返回数组?在C语言程序开发中,我们不可以编写下面这样的代码:char f(void)[8] { char ret; // ...fill... return ret;}int main(int argc, char ** argv) { char obj_a[10]; obj_a = f();}不...
  • 工作中遇到个问题,要对结构体数组进行初始化,编译环境是VS2010,语言是C++。 结构体定义如下: typedef struct test{ int ID; TCHAR name[100];} People; 错误初始化代码如下: People GA[2]={{1,_T(...
  • [C]结构体数组初始化

    千次阅读 2018-06-26 13:09:05
    /* ============================================================================ Name : struct_arr_init.c Author : Version : Copyright : Your copyright notice Description : H...
  • #include &lt;stdio.h&gt; #include &lt;math.h&gt; #define PI 3.14159265 static void math_test_acos(){ double x,ret,val; x=0.9; val=180.0/PI; ...%f 的反余弦是 %...
  • 好像没有什么数组常量吧。 普通数组引用 void function(int (&array)[5]) 研究发现,木有定义成功,常量数组数组中...结构体常量数组 struct abc{ int a; int b;};const abc test[1] ={ {2,2},};//常量数组...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,045
精华内容 818
关键字:

结构体数组初始化