您好,登錄后才能下訂單哦!
首先呢,結構是一些值的集合,這些值稱為成員變量,結構的每個成員變量可以是不同類型的變量。
一般的聲明
struct Book
{
char name[100]; //書名
float price; //價格
}b1,b2; //全局變量
struct Book b3; //全局變量
//并且上面兩種表示方式是相同的意思
int main()
{
struct Book b5; //這里的變量叫做局部變量
return 0;
}
特殊的聲明
struct
{
int a;
char b;
float c;
//此處未完全聲明變量,缺少了結構體標簽
//這種叫做匿名結構體類型
}b;
struct
{
int a;
char b;
float c;
}*ps;//結構體的指針變量,用來存儲地址
??!但是 ps=&x;
這種寫法是不合法的,編譯器認為這兩種不同的寫法是兩個不同的類型。
此處,我們用一個例子來講述我們來表述一個數(shù)據(jù)結構鏈表中的節(jié)點
struct Node
{
int data;
struct Node*next;
};
int main()
{
struct Node a = { 3, NULL };
struct Node b = { 5, &a };
printf("%d\n", b.data);
printf("%p\n", b.next);
system("pause");
return 0;
}
下面的地址便是結構體中b指向的地址,即a的地址。
!??!很重要的一點,當結構體自引用的時候,不可寫成匿名結構體類型。
例題如下
typedef struct
{
int data;
Node* next;
}Node;
在此處編譯會出現(xiàn)錯誤,是由于Node在末尾端才定義,但在結構體內(nèi)部便已經(jīng)被調用,這樣是非法的。
正確的寫法如下:
typedef struct Node
{
int data;
struct Node* next;
}Node;
簡單結構體的初始化
struct Point
{
int x;
int y;
};
int main()
{
struct Point p2 = { 1, 2 }; //定義一個局部變量p2并且給其進行賦值
printf("%d %d\n", p2.x, p2.y);
system("pause");
return 0;
}
結構體嵌套的初始化
struct Point
{
int x;
int y;
};
struct Node
{
int data;
struct Point p;
struct Node* next;
};
int main()
{
struct Node n1 = { 5, { 1, 2 }, NULL };
struct Node n2 = { 8, { 3, 4 }, &n1 };
printf("%d\n", n2.next->data);
printf("%d %d\n", n2.next->p.x, n2.next->p.y);
printf("%p\n", n2.next);
system("pause");
return 0;
}
免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內(nèi)容。