c語(yǔ)言結(jié)構(gòu)體初始化的幾種方式

編譯環(huán)境:
gcc version 5.4.0 20160609 (Ubuntu 5.4.0-6ubuntu1~16.04.9)

測(cè)試結(jié)構(gòu)體聲明如下:

struct person
{
  int age;
  char name[256];
}

第一種: 先定義變量, 用[.]或者[->]引用的方式初始化

//棧空間
struct person p1;
p1.age = 20;
strcpy(p1.name, "xiaoming");
printf("age: %d\n", p1.age);
printf("name: %s\n", p1.name);

//堆空間
struct person * p2 = NULL;
p2 = (struct person *)malloc(sizeof(*p2))
if(p2 != NULL)
{
  p2->age = 22;
  strcpy(p2->name, "xiaohong");
  printf("age: %d\n", p2->age);
  printf("name: %s\n", p2->name);
  free(p2);
  p2 = NULL;
}

第二種: 顯示按順序在大括號(hào)中賦值初始化

/**棧空間**/
//定義的時(shí)候同時(shí)初始化, 必須注意順序
struct person p1 = {18, "xiaoming"};
printf("age: %d\n", p1.age);
printf("name: %s\n", p1.name);
//可先定義后初始化
struct person p2;
p2 = (struct person){19, "xiaohong"};
printf("age: %d\n", p2.age);
printf("name: %s\n", p2.name);

/**堆空間**/
//先申請(qǐng)好內(nèi)存,后進(jìn)行初始化
struct person * p3 = NULL;
p3 = (struct person *)malloc(sizeof(*p3));
if(p3 != NULL)
{
  *p3 = (struct person){20, "xiaohua"}; 
  printf("age: %d\n", p3->age);
  printf("name: %s\n", p3->name);
  free(p3);
  p3 = NULL;
}

第三種: 在大括號(hào)中[.] + [成員]初始化方式, 這種方式linux內(nèi)核常用與初始化順序無關(guān);如果有重復(fù)的,最后一次初始化的值生效。(ps: 大括號(hào)中的最后一個(gè)逗號(hào)可加可不加)

/**棧空間**/
//定義的同時(shí)初始化
struct person p1 = 
{
  .age = 20,
  .name = "xiaoming",
  .age = 21,
};
printf("age: %d\n", p1.age);
printf("name: %s\n", p1.name);
//先定義再初始化
struct person p2;
p2 = (struct person)
{
  .age = 21,
  .name = "xiaohong",
};
printf("age: %d\n", p2.age);
printf("name: %s\n", p2.name);

/**堆空間**/
//先申請(qǐng)內(nèi)存后初始化
struct person * p3 = NULL;
p3 = (struct person *)malloc(sizeof(*p3));
if(p3 != NULL)
{
  *p3 = (struct person)
  {
    .age = 22,
    .name = "xiaohua",
  };
  printf("age: %d\n", p3->age);
  printf("name: %s\n", p3->name);
  free(p3);
  p3 = NULL;
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 134,868評(píng)論 18 139
  • Ubuntu的發(fā)音 Ubuntu,源于非洲祖魯人和科薩人的語(yǔ)言,發(fā)作 oo-boon-too 的音。了解發(fā)音是有意...
    螢火蟲de夢(mèng)閱讀 99,521評(píng)論 9 467
  • Spring Boot 參考指南 介紹 轉(zhuǎn)載自:https://www.gitbook.com/book/qbgb...
    毛宇鵬閱讀 46,937評(píng)論 6 342
  • linux資料總章2.1 1.0寫的不好抱歉 但是2.0已經(jīng)改了很多 但是錯(cuò)誤還是無法避免 以后資料會(huì)慢慢更新 大...
    數(shù)據(jù)革命閱讀 12,214評(píng)論 2 33
  • 我不知道你們有沒有這樣的感覺 當(dāng)你一個(gè)很親的人有了和你不一樣的圈子后,每次他發(fā)空間說說你都會(huì)看和你非共同好友的留言...
    竹林盡染中閱讀 240評(píng)論 0 1