1. 程式人生 > >C語言中結構體的初始化

C語言中結構體的初始化

《程式碼大全》建議在變數定義的時候進行初始化,但是很多人,特別是新人對結構體或者結構體陣列定義是一般不會初始化,或者不知道怎麼初始化。

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中有相同的全域性變數定義,且沒有初始化,編譯器會認為第二個是宣告而不是定義。)



相關推薦

C語言結構初始

《程式碼大全》建議在變數定義的時候進行初始化,但是很多人,特別是新人對結構體或者結構體陣列定義是一般不會初始化,或者不知道怎麼初始化。1、初始化typedef struct _TEST_T {        int i;        char c[10];}TEST_T;T

C語言結構參數變量的傳遞

結構體 函數 參數 傳遞 c語言 結構體 函數 參數 傳遞 一、前言 本文中的程序實現對員工信息結構體字段賦值並打印出來的功能。該結構體的定義如下:// 員工信息結構體 typedef struct { INT8 szEmployeeName[100];

C語言結構佔用記憶體問題

之前對結構體佔用記憶體一直很混亂,到底是按照哪個變數型別計算記憶體?還是怎麼計算?下面先看一個例子: 1 2 3 4 5 6 7 struct str1 { char a;

C語言結構的訪問方法解讀

  在C語言中,對結構體的訪問一般有兩種常規方式:"."訪問和"->"訪問。那麼兩者有什麼區別呢?對C語言有一定了解的同學應該知道,我們新建一個結構體的時候,實際上就是新建了一種資料型別(比如int,char,double都是一種資料型別,只不過這些是C語言自帶的資料型別),這是一種什麼型別呢?其實,這

C語言結構賦值問題的討論

結構體直接賦值的實現 下面是一個例項: #include <stdio.h> struct Foo { char a; int b; double c; }foo1, foo2; //define two

簡析c語言結構的宣告使用以及位段

1.結構體的定義 聚合資料型別能夠同時儲存超過一個的單獨資料。c語言中提供了兩種型別的聚合資料型別,陣列和結構。結構也是一些值的集合,這些值稱為它的成員。但每個成員可能具有不同的資料型別。結構體變數屬於標量型別,所以你可以像對待其他標量型別那樣執行相同型別的操作。結構體也可

C語言結構的直接賦值

這篇文章當時寫的比較隨意,考慮到看到這篇文章的人比較多,我重新寫了一篇比較完整的釋出在我的新部落格中,大家可以參考: 一直記得C語言中,結構體是不可以直接賦值的。我問了三個同學,都說在C++中可以,在C語言中不可以,需要逐一成員賦值或者用memcpy函式

C語言結構賦值的討論

今天幫師姐調一個程式的BUG,師姐的程式中有個結構體直接賦值的語句,在我印象中結構體好像是不能直接賦值的,正如陣列不能直接賦值那樣,我懷疑這個地方有問題,但最後證明並不是這個問題。那麼就總結一下C語言中結構體賦值的問題吧: 結構體直接賦值的實現 下面是一個例項: #

C語言結構指標的定義和引用

指向結構體型別變數的使用 首先讓我們定義結構體: struct stu { char name[20]; long number; float score[4]; } ; 再定義指向結構體型別變數的指標變數: struct stu *p1, *p2 ; 定義指標變數p 1、p 2,分別指向結構體型別變數。

C語言結構變數之間賦值

/********************************************************************** * 版權所有 (C)2015, Zhou Zhaoxiong。 * * 檔名稱:Struct2Struct.c * 檔案標識:無 * 內容摘要:結構體變數之間的賦值

C語言陣列的初始問題

C語言中陣列的初始化問題 一維陣列 Int a[] = {1,2,3,4} //用數去填充 Int a[3] = {1,2,3} //指定大小 Int a[3] = {0} // 都是預設為0 如果

c語言結構在子函式的用法

在c語言中,結構體是一種很常用的資料結構,但是要用好卻又有許多疑惑。 假設下面這個是我們要用到的結構體 typedef struct DATA data; struct DATA{ int *A; data *next; data *last; } 首先來看一下這兩個句子

C語言全域性變數初始的重要性!!!

在C語言裡,全域性變數如果不初始化的話,預設為0,也就是說在全域性空間裡:   int x =0; 跟 int x; 的效果看起來是一樣的。但其實這裡面的差別很大,強烈建議大家所有的全域性變數都要初始化,他們的主要差別如下:   編譯器在編譯的時候針對這兩種情況會產生兩種符

C語言結構與字元陣列之間的相互轉換

#include <stdio.h> #include <stdlib.h> #include <string.h> #pragma  pack(push)  //儲存對齊狀態   #pragma  pack(1)   typedef st

C語言結構以及在結構呼叫方法;聯合體和聯合體的使用

#include <stdio.h>  #include<stdlib.h>void study(){}; struct student{ int age; int number; void(*study1)(); } main(){//使用,在結構

C語言的未初始變數的值

C語言中未初始化的變數的值是0麼 全域性變數 、靜態變數初始值為0區域性變數,自動變數初始值隨機分配 C語言中,定義區域性變數時如果未初始化,則值是隨機的,為什麼?定義區域性變數,其實就是在棧中通過移動棧指標來給程式提供一個記憶體空間和這個區域性變數名繫結。因為這段

C語言結構定義

question tps 定義類 typedef 兩個 spa c語言 ida 類型 struct test { int a; }; /* 定義一個結構體,名字是test,這樣就可以使用struct test 來定義變量。比如 struct tes

C語言--結構初始

一、結構體基本初始化方法 定義 struct Mystruct { int first; double second; char* third; float four; }; 1、方法一:定義時賦值 賦值時注意定義時各個成員的順序,不能錯位。

C語言練習 結構初始

首先我們舉個例子。在 struct studentInfo { int id; char name[20]; }stu;中,我們先定義一個studentInfo的結構體變數,然後對其中的元素逐一賦值。例如: //第一種方法 stu.id =

C語言結構初始的四種方法

定義 struct InitMember { int first; double second; char* third; float four; }; 方法一:定義時賦值 struct InitMember t