1. 程式人生 > >(C/C++基礎)結構體_初始化_賦值_定義_宣告

(C/C++基礎)結構體_初始化_賦值_定義_宣告

首先介紹一下初始化、賦值、定義、宣告這四個概念。

初始化建立變數並給它賦初值。初始化和賦初值不同。初始化=帶指定初始值的定義。一個程式中,一個變數只能初始化一次。如:int  i=0;

賦值:擦除物件的當前值並用新值替代,在一個程式中,一個變數可以多次賦值。

定義:用來為變數分配記憶體空間,還可以為變數指定初始值。在一個程式中,變數有且僅有一個定義。例:int  i;(單純定義)  int  i=0;(帶指定初始值的定義)

宣告:用來向程式表明變數的型別和名字。定義也是宣告:當定義變數時我們聲明瞭它的型別和名字。可以通過使用extern關鍵字宣告變數而不是定義它。例:extern  int  i;

程式碼1:初始化結構體全域性變數,可以。

#include"ds.h"

/*定義結構體*/
typedef struct Pos{
	int x;
	int y;
}Pos;

/*在main函式外初始化結構體全域性變數*/
/*大括號只能在初始化結構體變數中使用,為結構體變數賦值哪怕是賦初值都只能對結構體中每個成員單獨賦值*/
Pos Begin={1,1},End={8,8};

int main()
{
	printf("%d,%d,%d,%d\n",Begin.x,Begin.y,End.x,End.y);
	return 0;
}

程式碼2:先定義結構體全域性變數,再對其賦值,不可以。
注:全域性空間中(函式體之外)只能執行定義和初始化,其他操作都不被允許。

#include"ds.h"

/*定義結構體*/
typedef struct Pos{
	int x;
	int y;
}Pos;

/*在main函式外先定義結構體全域性變數,再對其賦初值*/
    Pos Begin,End;  

    Begin.x=1; //賦值不允許出現在全域性空間中。編譯器會將它當做全域性變數定義來處理,於是會報告缺少型別識別符號
    Begin.y=1;
	End.x=8;
	End.y=8;

int main()
{
	printf("%d,%d,%d,%d\n",Begin.x,Begin.y,End.x,End.y);
	return 0;
}

程式碼3:在main中初始化結構體區域性變數,可以。

#include"ds.h"

/*定義結構體*/
typedef struct Pos{
	int x;
	int y;
}Pos;

int main()
{
/*在main函式內初始化結構體區域性變數*/
/*大括號只能在初始化中使用,賦值哪怕是賦初值都只能對結構體中每個成員單獨賦值*/
    Pos Begin={1,1},End={8,8}; 

	printf("%d,%d,%d,%d\n",Begin.x,Begin.y,End.x,End.y);
	return 0;
}

程式碼4:在main中先定義結構體區域性變數,再對其賦值,可以。

#include"ds.h"

/*定義結構體*/
typedef struct Pos{
	int x;
	int y;
}Pos;
 
int main()
{
/*在main函式內先定義結構體區域性變數,再對其賦初值*/
    Pos Begin,End;  
	
    Begin.x=1;   
    Begin.y=1;
	End.x=8;
	End.y=8;

	printf("%d,%d,%d,%d\n",Begin.x,Begin.y,End.x,End.y);
	return 0;
}


程式碼5:在main外先定義結構體全域性變數,在main內對其賦值,可以。

#include"ds.h"

/*定義結構體*/
typedef struct Pos{
	int x;
	int y;
}Pos;

/*在main函式外定義結構體全域性變數*/
/*在main函式中對其賦初值*/
Pos Begin,End; 

int main()
{
	Begin.x=1; 
    Begin.y=1;
	End.x=8;
	End.y=8;

	printf("%d,%d,%d,%d\n",Begin.x,Begin.y,End.x,End.y);
	return 0;
}