精华内容
下载资源
问答
  • 用实例教你给结构体数组成员赋值
  • c语言结构体数组初始化

    千次阅读 2021-05-22 13:03:19
    有关结构体数组初始化的问题struct _m_usmart_nametab usmart_nametab[]={#if USMART_USE_WRFUNS==1 //如果使能了读写操作(void*)read_addr,"u32 read_addr(u32 addr)",(void*)write_addr,"void write_addr(u32 addr...

    最近看一段代码有所迷惑,先简单总结一下。有关结构体数组初始化的问题

    struct  _m_usmart_nametab usmart_nametab[]=

    {

    #if USMART_USE_WRFUNS==1 //如果使能了读写操作

    (void*)read_addr,"u32 read_addr(u32 addr)",

    (void*)write_addr,"void write_addr(u32 addr,u32 val)",

    #endif

    (void*)delay_ms,"void delay_ms(u16 nms)",

    (void*)delay_us,"void delay_us(u32 nus)",

    (void*)LCD_Clear,"void LCD_Clear(u16 Color)",

    (void*)LCD_Fill,"void LCD_Fill(u16 xsta,u16 ysta,u16 xend,u16 yend,u16 color)",

    (void*)LCD_DrawLine,"void LCD_DrawLine(u16 x1, u16 y1, u16 x2, u16 y2)",

    (void*)LCD_DrawRectangle,"void LCD_DrawRectangle(u16 x1, u16 y1, u16 x2, u16 y2)",

    (void*)Draw_Circle,"void Draw_Circle(u16 x0,u16 y0,u8 r)",

    (void*)LCD_ShowNum,"void LCD_ShowNum(u16 x,u16 y,u32 num,u8 len,u8 size)",

    (void*)LCD_ShowString,"void LCD_ShowString(u16 x,u16 y,u16 width,u16 height,u8 size,u8 *p)",

    (void*)LCD_ReadPoint,"u16 LCD_ReadPoint(u16 x,u16 y)",

    (void*)fsmc_sram_test_write,"void fsmc_sram_test_write(u8 data,u32 addr)",

    (void*)fsmc_sram_test_read,"u8 fsmc_sram_test_read(u32 addr)",

    (void*)mymalloc,"void *mymalloc(u8 memx,u32 size)",

    (void*)myfree,"void myfree(u8 memx,void *ptr)",

    (void*)mf_mount,"u8 mf_mount(u8 drv)",

    (void*)mf_open,"u8 mf_open(u8*path,u8 mode)",

    (void*)mf_close,"u8 mf_close(void)",

    (void*)mf_read,"u8 mf_read(u16 len)",

    (void*)mf_write,"u8 mf_write(u8*dat,u16 len)",

    (void*)mf_opendir,"u8 mf_opendir(u8* path)",

    (void*)mf_readdir,"u8 mf_readdir(void)",

    (void*)mf_scan_files,"u8 mf_scan_files(u8 * path)",

    (void*)mf_showfree,"u32 mf_showfree(u8 *drv)",

    (void*)mf_lseek,"u8 mf_lseek(u32 offset)",

    (void*)mf_tell,"u32 mf_tell(void)",

    (void*)mf_size,"u32 mf_size(void)",

    (void*)mf_mkdir,"u8 mf_mkdir(u8*pname)",

    (void*)mf_fmkfs,"u8 mf_fmkfs(u8 drv,u8 mode,u16 au)",

    (void*)mf_unlink,"u8 mf_unlink(u8 *pname)",

    (void*)mf_rename,"u8 mf_rename(u8 *oldname,u8* newname)",

    (void*)mf_gets,"void mf_gets(u16 size)",

    (void*)mf_putc,"u8 mf_putc(u8 c)",

    (void*)mf_puts,"u8 mf_puts(u8*c)",

    };

    _m_usmart_nametab的结构体如下

    //函数名列表

    struct _m_usmart_nametab

    {

    void* func; //函数指针

    const u8* name; //函数名(查找串)

    };

    一开始一直不明白,为什么下边的只有两个参数,而上边的确有那么多,难道不是一一对应?

    其实上边的是一个table表,就像 u8 table[]={};

    而上边的定义的是一个结构体的数组,其成员很多。但每一个成员应该和结构体类型一致,这只不是定义一个这样结构类型的结构体数组而已。

    看下面例子

    typedef struct _TEST_T {

    int i;

    char c[10];

    }TEST_T;

    TEST_T gst = {1, “12345”};//可以初始化,设置i为1,s为一个字符串.

    TEST_T gst = {1};//初始化个数少于实际个数时,只初始化前面的成员。

    TEST_Tgst = {.c=“12345”};//有选择的初始化成员。

    复合字面量。

    gst = (TEST_T){122, "1256"};//这是一个赋值语句,也可以作为初始化。可以出现在程序的任何地方。

    当然也可以使用复合字面量来初始化:

    gst = (TEST_T){.i=122, .c="123"};

    3、结构体数组

    可以用多个大括号括起来:

    TEST_T gst[10] = {{},{},{},{}}

    也可以初始化其中的一个元素:

    TEST_T gst[10] = {[2]={}, [3]={}}

    也可以使用复合字面量:

    TEST_T gst[10] = {[2].i=0, [3].i={}}

    展开全文
  • C语言中的结构体结构体数组初始化与赋值

    万次阅读 多人点赞 2018-01-03 10:18:33
    最近写c语言中的结构体遇到了些问题,从网上找了些资料如下: 结构体是连续存储的,但由于结构体中成员类型各异,所以会存在内存对齐问题,也就是内存里面会有空档,...结构体是可以直接初始化的,在定义的时候,就可

    最近写c语言中的结构体遇到了些问题,从网上找了些资料如下:

    结构体是连续存储的,但由于结构体中成员类型各异,所以会存在内存对齐问题,也就是内存里面会有空档,具体的对齐方式这里 暂不讨论;

     

    1.结构体的定义和赋值 

    结构体是可以直接初始化的,在定义的时候,就可以初始化,而且如果你的结构体中恰好有字符数组的话,这个时候初始化是不错的选择,原因很简单,字符数组只能定义的时候直接初始化

    后来就不可以了,后来你就只能用strcpy函数来拷贝初始化了。

    struct 结构体名
    {
        数据类型   成员名1;
        数据类型   成员名2;
        :
        数据类型   成员名n;
    };

     2.定义结构体变量的3种方法:

    第1种:

    struct 结构体名
    {
    成员列表;
    }变量名1;

    第2种:

    struct 结构体名
    {
    成员列表;
    };
    struct 结构体名 变量名2;

    第3种:

    typedef struct 结构体名
    {
        成员列表;
    }结构体别名;
    
    结构体别名 变量名3;

     

    访问结构体成员的2种方式:
    1、直接访问:结构体变量名.成员名

    2、指针访问:结构体变量指针->成员名


    3.结构体初始化操作

    1. struct 结构体名 变量名 = {0,0,0,...};
    
    2. struct 结构体名 变量名 = 
    {
        .成员1 = 0,
        .成员2 = 0,
        .成员3 = 0,
        ...
    };
    
    3. struct 结构体名 变量名 = 
    {
        成员1: 0,
        成员2: 0,
        成员3: 0
    };

    第2、3种方式成员顺序可以打乱,甚至可以只初始化其中某几个成员。3种初始化的方式在linux下使用GCC编译均可通过。

     

    4.结构体定义时的嵌套


    1、内部的结构体名称定义齐全

    struct student
    {
        int a;
        int b;
        struct other
        {
            int c;
            int d;
        }name;
    };
    
    引用c成员的方式: 变量.name.c
     
     
    2、 内部的结构体通常定义为无名结构体

     

     

    struct student
    {
        int a;
        int b;
        struct
        {
            int c;
            int d;
        };
    };
    
    引用c成员的方式:变量.C

     

     

     

    展开全文
  • #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;
    }
    

     

    展开全文
  • 我们在定义数据时,当需要定义多个变量时,可以将多个变量定义为一个结构体结构体变量可以作为函数的形参。例如如下函数: void function1(stuVar1 *stuIn,)

              我们在定义数据时,当需要定义多个变量时,可以将多个变量定义为一个结构体。结构体变量可以作为函数的形参。例如定义如下的结构体和函数:

    #include <iostream>
    struct stuVar1 {
    	char cName[30];
    	char cNumber[12];
    };
    struct stuVar2 {
    	int nCount;
    	char cSubJectName[50];
    	stuVar1 stu;
    };
    
    struct stuVar3 {
    	int nCount;
    	char cSubJectName[50];
    	char cName[30];
    	char cNumber[12];
    };
    
    void function1(stuVar2* stuSrc, stuVar3* stuDest) {
    	strncpy_s(stuDest->cName, stuSrc->stu.cName,29);  
    	strncpy_s(stuDest->cNumber, stuSrc->stu.cNumber, 11);
    	strncpy_s(stuDest->cSubJectName, stuSrc->cSubJectName,49);
    	stuDest->nCount = stuSrc->nCount;
    }
    int main()
    {
        std::cout << "Hello World!\n";
    	stuVar1 stu1 = {sizeof(stuVar1),0}; //结构体初始化 
    	const char* pName = "XiaoWang";
    	strncpy_s(stu1.cName, pName, sizeof(stu1.cName)-1);
    	const char* pNumber = "13235678967";
    	strncpy_s(stu1.cNumber, pNumber, sizeof(stu1.cNumber) - 1);
    
    	stuVar2 stu2 = { sizeof(stuVar2),0 };
    	stu2.nCount = 2;
    	const char* pSubject = "Physical";
    	strncpy_s(stu2.cSubJectName, pSubject, sizeof(stu2.cSubJectName) - 1);
    	stu2.stu = stu1;
    
    	stuVar3 stu3 = {sizeof(stuVar3),0};
    	function1(&stu2, &stu3);
    
    }
    

    结构体的初始化方法有:

         (1)stuVar2 stu2 = { sizeof(stuVar2),0 };   //上面代码结构体初始化使用

           也可以省略0,直接stuVar2 stu2 = { sizeof(stuVar2) };  //int初始值不为0

    上面函数运行的结果如下:

     

    结构体的初始化方法还有下面几种 :

          //方法(2) 初始值为0, 为""
          stuVar2 stu2 = {0 };  
    
          //方法(3)初始值为0
           stuVar3 stu3; ::memset(&stu3,0,sizeof(stuVar3)); )
    
          //方法(4)定义时,直接使用构造函数初始化
           typedef struct tagVAR_INFO {  
                int nCount;
                char cSubJectName[50];
                tagVAR_INFO (){
                nCount = 0;
               ::memset(&cSubJectName,0,sizeof(cSubJectName));
              }
           }VAR_INFO;

    上面的代码中使用strncpy_s函数对结构体中的char数组变量进行了复值。在结构体中尽量使用char数组,少用char*;因为char*指向的一块地址,而数组是包括地址和内容的,关于char数组和char*的问题可参考char *和char数组的区别(深拷贝和浅拷贝的观点)以及内核访问用户空间 - OSCHINA - 中文开源技术交流社区

    结构体运算符重载见:C++结构体排序(运算符重载,比较函数重写)_Noah_orz的博客-CSDN博客

    展开全文
  • 结构体数组初始化

    千次阅读 2021-03-17 15:24:52
    《代码大全》建议在变量定义的时候进行初始化,但是很多人,特别是新人对结构体或者结构体数组定义是一般不会初始化,或者不知道怎么初始化。 1、初始化 typedef struct _TEST_T { int i; char c[10]; }TEST_T; TEST...
  • 发现一个问题,当定义了一个结构体,结构体中含有数组,使用一个数组直接复制给结构体数组是错误。 typedef struct _Snake { char direction; int snakeSize; int body[MAXSIZE * MAXSIZE]; } Snake; int ...
  • 结构体数组在定义的同时也可以初始化,例如:structstu{char*name;//姓名intnum;//学号intage;//年龄chargroup;//所在小组floatscore;//成绩}class[5]={{"Liping",5,18,'C',145.0},{"Zhangping",4,19,'A',130.5},{...
  • 比如要描述一本书的信息,可以将书的名称,作者,价格这些信息用一个结构体来描述,在使用的过程中不可能只描述一本书,所以就需要使用一个结构体数组来描述多本书的信息。   首先声明一个结构体。 struct book {...
  • typedef struct _TEST_T { int i; char c[10]; }TEST_T; ...//初始化个数少于实际个数时,只初始化前面的成员。 TEST_T gst = {.c=“12345”};//有选择的初始化成员。 复合字面量。 gst ...
  • C语言结构体数组初始化 一、使用场景 在C编码中,经常需要对结构体数组进行初始化。 使用这种方法,能够使得代码更加的清晰,易读。 例如:需要根据返回码,一个status code 做不同的操作。 int process_by_status...
  • 1.首先定义结构体数组:typedef struct BleAndTspRmtCmd{char terminal[3];char note[3];char rmtCmd[10];char cmdPropt[24];};BleAndTspRmtCmd为结构体名,可以通过这个结构体名定义其他结构体变量,...
  • 结构体数组成员进行初始化

    千次阅读 2019-05-14 23:19:24
    数组作为结构体成员的初始化示例: #include <stdio.h> #include <stdlib.h> typedef struct Month { unsigned char a[3]; unsigned char b[3]; }p_month; void main() { p_month temp = {{1,2},{...
  • # 结构体定义 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"))
  • @2018-10-23 具体代码 1 #include <stdio.h> 2 3 4 5 typedef struct _structArray 6 { 7 int objI; 8 char array[10]; 9 float objF; 10 }StructArray_t; ......
  • 【结构体的存储】 1结构体整体空间是占用空间最大的成员(的类型)所占字节数的整数倍。 2.结构体的每个成员相对结构体首地址的偏移量(offset)...【结构体数组要在定义时初始化。先定义再赋初值是错误的】 错误: str
  • 标签:C语言中结构体数组概念及定义一个结构体变量可以存放一个学生的一组信息,可是如果有 10 个学生呢?难道要定义 10 个结构体变量吗?难道上面的程序要复制和粘贴 10 次吗?很明显不可能,这时就要使用数组。...
  • #C++#如何初始化一个结构体里数组

    千次阅读 2020-10-25 15:53:57
    如何初始化一个结构体里数组背景第二次作业概述问题结论 用CSDN很长时间了也从中学到很多东西,从今天开始决定在它上面留下点自己的痕迹,以便以后复习查阅,如果能够帮到或者被帮到就更好啦~ 背景 在做算法课第二...
  • 结构体多维数组成员初始化的方法以及赋值内容的表示方法 1 #include <stdio.h> 2 3 4 typedef struct TTSET 5 { 6 char ssTime[3][2][6]; //start-stop time 7 char time[6][6]; 8 ...
  • Keil 结构体变量初始化tujidi1csd25142016-09-30一维数组结构体数组结构体数组,通过改变指针类型改变访问数组的方式toto129748850424332014-08-01mfc结构体指针、结构体数组指针u01399024812292014-12-14memset...
  • #include <stdio.h> #include <string.h>...//声明结构体 struct info { char *infos; }; typedef struct Books { char *name; int page; struct info *pinfo; struct tells *...
  • golang 结构体数组初始化赋值

    千次阅读 2019-09-12 12:01:38
    collArr := []*Collection{ &Collection{ ItemID: "592525", CouponID: "96f1aa53473c99", }, } 结构体使用的方法参数值 func Collec(collectr []*Collection) error {
  • 以PAT(A)1025 题目举例: struct every { int local; // 测试地点 int num;... // 用以不经初始化定义everystudent[30005] every(int _local, int _num, int _score) : local(_local), num(_n...
  • 结构体数组初始化和赋值

    千次阅读 2018-02-12 11:50:32
    {}这种语法不能用于结构体的赋值,只能用于初始化。...数组不能相互赋值或初始化 ,既然不能相互赋值,也就不能用数组类型作为函数的参数或返回值 void foo(int a[5]){...}然后这样调用:int ...
  • Linux中数组结构体的快捷初始化最近看了linux内核的一点代码,感受颇深,现在就把数组结构体初始化的部分简单的记录一下。那么怎么快捷方便的对数组和结构体进行初始化呢?一、数组快捷初始化我们使用的方法有...
  • 结构体数组定义时初始化

    千次阅读 2019-05-29 21:02:11
    结构体数组的初始化与前面讲的数值型数组的初始化是一模一样的,数值类型数组初始化的方法需要注意的是在结构体数组的初始化中同样适用,因为不管是不是数值型数组还是结构体数组都是数组。 #include<stdio.h>...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 120,154
精华内容 48,061
关键字:

结构体里的数组初始化