0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

結(jié)構(gòu)體與指針的關(guān)系

撞上電子 ? 2024-01-11 08:00 ? 次閱讀

C語言中,結(jié)構(gòu)體(Struct)是一種用戶自定義的數(shù)據(jù)類型,它允許您將不同類型的數(shù)據(jù)項組合在一起,以便形成一個更復雜的數(shù)據(jù)結(jié)構(gòu)。結(jié)構(gòu)體可以包含多個成員變量,每個成員變量可以是不同的數(shù)據(jù)類型。而結(jié)構(gòu)體指針則是指向結(jié)構(gòu)體類型的指針,用于操作和訪問結(jié)構(gòu)體的成員。下面我們將分別詳細解釋結(jié)構(gòu)體和結(jié)構(gòu)體指針,并提供相應(yīng)的示例代碼。


1.結(jié)構(gòu)體:

結(jié)構(gòu)體是一種自定義數(shù)據(jù)類型,用于將不同類型的數(shù)據(jù)組合在一起。 .定義結(jié)構(gòu)體的語法格式:struct 結(jié)構(gòu)體名 { 成員列表 };

#include
// 定義結(jié)構(gòu)體struct Student { char name[50]; int age; float gpa;};
int main() { // 聲明結(jié)構(gòu)體變量 struct Student student1;
// 結(jié)構(gòu)體變量賦值 strcpy(student1.name, "John"); student1.age = 20; student1.gpa = 3.7;
// 結(jié)構(gòu)體變量訪問 printf("Name: %s\n", student1.name); printf("Age: %d\n", student1.age); printf("GPA: %.2f\n", student1.gpa);
return 0;}

在上述示例中,我們定義了一個名為 Student 的結(jié)構(gòu)體,包含了學生的姓名、年齡和平均成績。我們聲明了一個結(jié)構(gòu)體變量 student1 并對其成員進行賦值。然后,我們通過點運算符 . 訪問結(jié)構(gòu)體變量的成員。


2.結(jié)構(gòu)體指針:

結(jié)構(gòu)體指針是指向結(jié)構(gòu)體類型的指針變量,通過該指針可以操作和訪問結(jié)構(gòu)體的成員。.定義結(jié)構(gòu)體指針的語法格式:struct 結(jié)構(gòu)體名 *指針變量名;

#include
// 定義結(jié)構(gòu)體struct Point { int x; int y;};
int main() { // 聲明結(jié)構(gòu)體指針 struct Point *ptr;
// 動態(tài)分配內(nèi)存 ptr = (struct Point*)malloc(sizeof(struct Point));
// 結(jié)構(gòu)體指針訪問(使用箭頭運算符 ->) ptr->x = 10; ptr->y = 20;
// 結(jié)構(gòu)體指針打印 printf("Coordinates: (%d, %d)\n", ptr->x, ptr->y);
// 釋放內(nèi)存 free(ptr);
return 0;}

在上述示例中,我們定義了一個名為Point 的結(jié)構(gòu)體,表示一個二維坐標點。我們聲明了一個結(jié)構(gòu)體指針 ptr 并使用 malloc() 動態(tài)分配了結(jié)構(gòu)體的內(nèi)存。通過結(jié)構(gòu)體指針 ptr,我們可以使用箭頭運算符> 來訪問和修改結(jié)構(gòu)體的成員。使用結(jié)構(gòu)體和結(jié)構(gòu)體指針,我們可以更靈活地組織和訪問復雜的數(shù)據(jù)結(jié)構(gòu)。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • C語言
    +關(guān)注

    關(guān)注

    180

    文章

    7575

    瀏覽量

    134043
  • 指針
    +關(guān)注

    關(guān)注

    1

    文章

    475

    瀏覽量

    70457
  • 結(jié)構(gòu)體
    +關(guān)注

    關(guān)注

    1

    文章

    127

    瀏覽量

    10800
收藏 人收藏

    評論

    相關(guān)推薦

    C語言結(jié)構(gòu)組及指針問題

    extern xdata struct msg setvalue[5];//設(shè)定參數(shù)--結(jié)構(gòu)組 extern idata struct msg *CurSetPara;//指向結(jié)構(gòu)
    發(fā)表于 04-18 16:49

    新手求教關(guān)于STM32中用結(jié)構(gòu)指針的問題??!

    為50MHz GPIO_SetBits(GPIOD,GPIO_Pin_2);//PD.2 輸出高 //一下為自己修改的結(jié)構(gòu)指針操作,有問題 /*GPIO_InitTypeDef
    發(fā)表于 10-06 16:05

    ucosII系統(tǒng)移植到STM32后的用結(jié)構(gòu)定義指針的問題

    小弟正在學習UCOSII系統(tǒng),現(xiàn)在正在用STM32平臺做實驗,現(xiàn)在遇到用結(jié)構(gòu)定義指針的問題,如用結(jié)構(gòu)OS_MEM,其定義入下typede
    發(fā)表于 01-18 11:29

    關(guān)于操作系統(tǒng)的結(jié)構(gòu)指針使用方式

    結(jié)構(gòu)的變量的指針結(jié)構(gòu)體內(nèi)部成員的指針關(guān)系其實他們兩者在內(nèi)存地址上是有一定的數(shù)值
    發(fā)表于 10-06 23:44

    結(jié)構(gòu)指針(轉(zhuǎn)載)

    掌握的。記住;遇問題不要逃避,要面對現(xiàn)實、勇于挑戰(zhàn),仔細研究難題的所在,這樣相信你會成功的!  指針結(jié)構(gòu)指針關(guān)系亦有兩重:其一是在定義結(jié)構(gòu)
    發(fā)表于 01-22 21:40

    請問結(jié)構(gòu)結(jié)構(gòu)指針做函數(shù)形參的作用是什么?

    什么屬性的,但是解釋的不是很清楚還請大家?guī)兔獯鹨幌?2)第二個問題是關(guān)于結(jié)構(gòu)結(jié)構(gòu)指針做函數(shù)參數(shù)的疑惑GPIO_T GPIOB這個定義
    發(fā)表于 11-01 04:35

    結(jié)構(gòu)指針如何結(jié)合

    一直沒弄明白結(jié)構(gòu)指針的是使用方法,最近寫多級菜單,參考了別人的程序,但是不能理解希望能有大神詳細的解釋一下!不勝感激。 void (*current_operation_index
    發(fā)表于 05-04 05:56

    C語言結(jié)構(gòu)對函數(shù)指針封裝示例

    C語言結(jié)構(gòu)對函數(shù)指針封裝示例示例:#include int i, j;struct DATE{ int year; char month; char data; char hour; char
    發(fā)表于 07-15 06:18

    消息隊列傳遞結(jié)構(gòu)指針結(jié)構(gòu)異同

    FreeRTOS消息隊列 傳遞結(jié)構(gòu)指針結(jié)構(gòu)異同1 消息隊列傳遞結(jié)構(gòu)
    發(fā)表于 02-11 07:02

    C語言入門教程-指向結(jié)構(gòu)指針

    指向結(jié)構(gòu)指針 在C語言中幾乎可以創(chuàng)建指向任何類型的指針,包括用戶自定義的類型。創(chuàng)建結(jié)構(gòu)
    發(fā)表于 07-29 12:04 ?3122次閱讀

    單片機的結(jié)構(gòu)指針等資料說明

    本文檔的主要內(nèi)容詳細介紹的是單片機的結(jié)構(gòu)指針等資料說明包括了:單片機的常量,單片機的變量,構(gòu)造類型:數(shù)組,構(gòu)造類型:結(jié)構(gòu),構(gòu)造類型:
    發(fā)表于 12-05 17:23 ?17次下載
    單片機的<b class='flag-5'>結(jié)構(gòu)</b><b class='flag-5'>體</b>和<b class='flag-5'>指針</b>等資料說明

    FreeRTOS消息隊列 傳遞結(jié)構(gòu)指針結(jié)構(gòu)異同

    FreeRTOS消息隊列 傳遞結(jié)構(gòu)指針結(jié)構(gòu)異同
    發(fā)表于 12-08 12:06 ?6次下載
    FreeRTOS消息隊列 傳遞<b class='flag-5'>結(jié)構(gòu)</b><b class='flag-5'>體</b><b class='flag-5'>指針</b>和<b class='flag-5'>結(jié)構(gòu)</b><b class='flag-5'>體</b>異同

    Keil編譯器--結(jié)構(gòu)指針函數(shù);結(jié)構(gòu)作為參數(shù)時,不能調(diào)用結(jié)構(gòu)指針函數(shù)

    Keil編譯器很多奇葩的地方,比如很多程序的寫法在keil編譯器里面實現(xiàn)是實現(xiàn)不了的,并且不報錯,而且莫名其妙的死機。結(jié)構(gòu)里面有函數(shù)指針時,直接調(diào)用是可以的,但是在當結(jié)構(gòu)
    發(fā)表于 12-20 19:41 ?19次下載
    Keil編譯器--<b class='flag-5'>結(jié)構(gòu)</b><b class='flag-5'>體</b><b class='flag-5'>指針</b>函數(shù);<b class='flag-5'>結(jié)構(gòu)</b><b class='flag-5'>體</b>作為參數(shù)時,不能調(diào)用<b class='flag-5'>結(jié)構(gòu)</b><b class='flag-5'>體</b><b class='flag-5'>指針</b>函數(shù)

    C語言入門之結(jié)構(gòu)指針

    在C語言中,指向結(jié)構(gòu)對象的指針變量既可以指向結(jié)構(gòu)變量,也可指向結(jié)構(gòu)
    的頭像 發(fā)表于 03-24 14:59 ?920次閱讀

    Linux內(nèi)核如何使用結(jié)構(gòu)和函數(shù)指針?

    我將結(jié)合具體的Linux內(nèi)核驅(qū)動框架代碼來展示Linux內(nèi)核如何使用結(jié)構(gòu)和函數(shù)指針。
    的頭像 發(fā)表于 09-06 14:17 ?833次閱讀
    Linux內(nèi)核如何使用<b class='flag-5'>結(jié)構(gòu)</b><b class='flag-5'>體</b>和函數(shù)<b class='flag-5'>指針</b>?