精华内容
下载资源
问答
  • 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={}}

    展开全文
  • 我们在定义数据时,当需要定义多个变量时,可以将多个变量定义为一个结构体结构体变量可以作为函数的形参。例如如下函数: 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博客

    展开全文
  • 发现一个问题,当定义了一个结构体,结构体含有数组,使用一个数组直接复制给结构体数组是错误。 typedef struct _Snake { char direction; int snakeSize; int body[MAXSIZE * MAXSIZE]; } Snake; int ...

    发现一个问题,当定义了一个结构体,结构体中含有数组,使用一个数组直接复制给结构体数组是错误。

    typedef struct _Snake {
       char direction;
       int snakeSize;
       int body[MAXSIZE * MAXSIZE];
    } Snake;
    
    int snakeBody[MAXSIZE * MAXSIZE] = { 0 };
    Snake sn;
    sn.body = snakeBody; // int *类型的值不能用于初始化int类型的实体
    

    面对这种问题有两个方法:第一个是将结构体的成员声明为指针;第二种是使用memset或者memcpy函数来初始化结构体数组。

    1. 指针成员
    typedef struct _Snake {
       char direction;
       int snakeSize;
       int *body;
    } Snake;
    
    1. 数组copy
    memcpy(&sn.body, snakeBody, sn.snakeSize * sizeof(int)); // 注意要用sizeof,memcpy是以char类型的字节为单位长度来拷贝的
    
    展开全文
  • 结构体数组初始化

    千次阅读 2021-03-17 15:24:52
    《代码大全》建议在变量定义的时候进行初始化,但是很多人,特别是新人对结构体或者结构体数组定义是一般不会初始化,或者不知道怎么初始化。 1、初始化 typedef struct _TEST_T { int i; char c[10]; }TEST_T; TEST...

    《代码大全》建议在变量定义的时候进行初始化,但是很多人,特别是新人对结构体或者结构体数组定义是一般不会初始化,或者不知道怎么初始化。

    1、初始化

    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”};//有选择的初始化成员。

    2、复合字面量。

    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={}}

    为什么要初始化:

    1、对局部变量初始化可以防止随机值产生的危害。

    2、对全局变量初始化可以告诉编译器,这是一个定义,而不是一个声明。(如果两个c中有相同的全局变量定义,且没有初始化,编译器会认为第二个是声明而不是定义。)

    展开全文
  • 结构体数组在定义的同时也可以初始化,例如:structstu{char*name;//姓名intnum;//学号intage;//年龄chargroup;//所在小组floatscore;//成绩}class[5]={{"Liping",5,18,'C',145.0},{"Zhangping",4,19,'A',130.5},{...
  • 比如要描述一本书的信息,可以将书的名称,作者,价格这些信息用一个结构体来描述,在使用的过程不可能只描述一本书,所以就需要使用一个结构体数组来描述多本书的信息。   首先声明一个结构体。 struct book {...
  • 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为结构体名,可以通过这个结构体名定义其他结构体变量,...
  • 但是根据我对上述标准的解释,你应该是OK,D应该被初始化.我甚至测试了一些新的布局,结果是如预期的 #include int main() { struct A { int B[100]; int D;}; A memory{}; memory.D = 42; std::cout ; // let's place...
  • 最近看了linux内核的一点代码,感受颇深,由于自己知识的匮乏,有些用法以前都没有见过,现在就把数组结构体初始化的部分简单的记录一下。那么怎么快捷方便的对数组和结构体进行初始化呢?一、数组快捷初始化我们...
  • Keil 结构体变量初始化tujidi1csd25142016-09-30一维数组结构体数组结构体数组,通过改变指针类型改变访问数组的方式toto129748850424332014-08-01mfc结构体指针、结构体数组指针u01399024812292014-12-14memset...
  • struct s_fre_phasePoint{ int start_fre; int end_fre; }; struct s_fre_phase{ s_fre_phasePoint freq_point; QVectorfreq_avr; }; #define fre_phaseNum 10...s_fre_phase fre_phase[fre_phaseNum]={ ...{{80,100},{}},
  • 把那个struct当成一个普通的int[14]理解就好啦,就是二维数组初始化,你可以像这样打印出来看看。#include using namespace std;typedef struct{uint8_t a;uint8_t b[10];uint8_t c[3];}basic;int main(){basic ...
  • struct test250 0 180 3111 name: FOO_IIC type: 1 enable: 0222 name: FOO_GPIO type: 0 enable: 1333 name: FOO_SPI type: 2 enable: 1*/#include #include ///////////////////////// 简单int类型的数组// ...
  • 我在给结构体中数组赋值的时候显示,左操作数不能作为左值。左值就是变量,那么也就是说结构体里面的数组是一个常量而不是变量。那么怎么解决这个问题? typedef struct student { char name[20]; int age; } ...
  • 使用repmat是目前为止预分配结构体的最有效的方法:N = 10000;b = repmat(struct('x',1), N, 1 );这是使用Matlab 2011a比预分配通过索引,〜10倍更快N = 10000;b(N).x = 1索引方法仅略微快于不预分配。No ...
  • 我正在C执行一个卡片游戏。有很多类型的卡,每个都有一堆信息,包括一些需要单独脚本的操作。给定一个这样的结构(我不确定我有函数指针的语法)struct CARD {int value;int cost;// This is a pointer to a ...
  • 指向结构体类型数组的指针的使用定义一个结构体类型数组,其数组名是数组...[例7-3] 在例7 - 2定义了结构体类型,根据此类型再定义结构体数组及指向结构体类型的指针。struct data{intday,month,year;};struct stu...
  • #include struct nes{char name[21];int num;} st; /* st 全局结构变量 */void input(struct nes * st); /* 函数原型 */void show_nes(struct nes * st); /* 函数原型 *///----------------------------------------...
  • C++结构体数组一个结构体变量可以存放一组数据(如一个学生的学号、姓名、成绩等数据)。如果有10个学生的数据需要参加运算,显然应该用数组,这就是结构体数组结构体数组与以前介绍过的数值型数组的不同之处在于...
  • 背景C89标准规定初始化语句的元素以固定顺序出现,该顺序即待初始化数组或结构体元素的定义顺序。C99标准新增指定初始化(Designated Initializer),即可按照任意顺序对数组某些...1数组初始化数组初始化列表使...
  • C++结构体数组 | 结构体数组的使用

    千次阅读 2020-12-30 21:23:16
    C++结构体数组 C++结构体数组与以前介绍过的数值型数组的不同之处在于:每个数组元素都是一个结构体类 型的数据,它们都分别包括各个成员项。 C++结构体数组定义 C++结构体数组的定义和定义结构体变量的方法相仿,只...
  • 它与前面讲的数值型数组几乎是一模一样的,只不过需要注意的是,结构体数组的每一个元素都是一个结构体类型的变量,都包含结构体所有的成员项。定义结构体数组的方法很简单,同定义结构体变量是一样的,...
  • 定义变量时一定要进行初始化,尤其是数组结构体这种占用内存大的数据结构。在使用数组的时候经常因为没有初始化而产生“烫烫烫烫烫烫”这样的野值,俗称“乱码”。 每种类型的变量都有各自的初始化方法,memset() ...
  • 一、结构体的定义struct student{ //struct 结构体名long studentID; //数据类型 成员名1char studentName[10]; //数据类型 成员名2int scoreMath; //数据类型 成员名3};二、结构体变量的定义1先声明结构体模板,再...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 119,720
精华内容 47,888
关键字:

结构体中的数组初始化