c語言比較結構體
1. C語言結構體中struct和typedef struct有什麼區別
C語言結構體中,struct與typedef struct在聲明、訪問及重新定義方面存在顯著差異。
在聲明方面,struct可以直接使用結構體名字進行聲明。例如:
struct student {
int age;
char name[20];
};
而typedef struct則為結構體提供了一個別名,方便後續使用。例如:
typedef struct student {
int age;
char name[20];
}
Stu;
這樣一來,我們可以直接使用Stu來聲明結構體變數。
在訪問結構體成員時,struct聲明的結構體可以直接通過結構體變數訪問成員,如:
struct student s;
s.age = 20;
而typedef struct聲明的結構體則需要通過結構體變數顯式訪問成員,如:
Stu s;
s.age = 20;
在重新定義結構體方面,struct聲明的結構體需要重新編寫整個結構體定義,而typedef struct聲明的結構體可以通過別名繼承原有的結構體定義進行重新定義,如:
typedef struct student {
int age;
char name[20];
}
Stu;
我們可以通過Stu來繼承原有的結構體定義,進行重新定義。
綜上所述,struct與typedef struct在聲明、訪問及重新定義方面各有特點,選擇哪種方式取決於具體需求。
使用struct可以直接聲明結構體變數,方便直接訪問成員,但重新定義時需重寫整個結構體。
而使用typedef struct則可通過別名聲明結構體,訪問成員時需通過結構體變數,但在重新定義時可以通過繼承原有結構體定義進行。
根據實際情況選擇合適的方式,可以提高編程效率。
2. C語言結構體成員引用怎麼使用strcmp比較
結構體成員運算符。->指針運算符。1、如果結構體中的成員均為一般變數(包括結構體變數),則使用「.」,如果成員變數為指針(不管指向什麼,包括結構體),則使用「->」。2、如果定義了結構體數組指針,則可分別使用「.」和「->」,區別在於指針帶下標時,以是數組形式訪問,此時用「.」,如果不帶下標(或使用偏移),此時用「->」。如:struct
myT{
int
i;
long
l;}myT;myT
*pm;pm
=
malloc(sizeof(myT)*100);
//定義100個元素的結構體數組pm->i=1;
//訪問結構體數組指針中第一個元素的成員變數i(pm+49)->i=50;
//訪問結構體數組指針中第50個元素的成員變數ipm[49].i=50;
//功能同上一句free(pm);
3. C語言裡面的聯合體和結構體有什麼區別,分別是什麼含義感覺都是一樣的,都是類的不同特性
聯合體與結構體是很容易混淆的概念。粗略一看,兩者無論聲明、定義還是定義對象的方式都很相似。然而這兩個東西的概念和作用實際千差萬別。
首先,聯合體的各個成員共用內存,並應該同時只能有一個成員得到這塊內存的使用權(即對內存的讀寫),而結構體各個成員各自擁有內存,各自使用互不幹涉。所以,某種意義上來說,聯合體比結構體節約內存。
舉個例子:
typedef struct
{
int i;
int j;
}A;
typedef union
{
int i;
double j;
}U;
sizeof(A)的值是8,sizeof(U)的值也是8(不是12)。
為什麼sizeof(U)不是12呢?因為union中各成員共用內存,i和j的內存是同一塊。而且整體內存大小以最大內存的成員的劃分。即U的內存大小是double的大小,為8了。sizeof(A)大小為8,因為struct中i和j各自得到了一塊內存,每人4個位元組,加起來就是8了。
了解了聯合體共用內存的概念,也就是明白了為何每次只能對其一個成員賦值了,因為如果對另一個賦值,會覆蓋了上一個成員的值。