溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

c語言中結構體的聲明、自引用、以及變量的定義和初始化

發(fā)布時間:2020-07-30 08:14:46 來源:網(wǎng)絡 閱讀:1468 作者:勿忘勛心 欄目:編程語言

1.結構體的聲明

首先呢,結構是一些值的集合,這些值稱為成員變量,結構的每個成員變量可以是不同類型的變量。

一般的聲明

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;
這種寫法是不合法的,編譯器認為這兩種不同的寫法是兩個不同的類型。

2.結構體的自引用

此處,我們用一個例子來講述我們來表述一個數(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;
}

c語言中結構體的聲明、自引用、以及變量的定義和初始化

下面的地址便是結構體中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;

3.結構體變量的定義和初始化

簡單結構體的初始化

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;
}

c語言中結構體的聲明、自引用、以及變量的定義和初始化

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內(nèi)容。

AI