c语言中定义结构体指针的作用,C语言结构体定义,使用及指针(1)
前言
C語言中的結構體作為一大難點,并且對于需要學習數據結構的同學來說,這個結構是每次上課都會遇到的,所以,我們只有更深層次的理解結構體的知識,才能更好的掌握數據結構
結構體用處
結構體到底有什么用?
比如,在STM32的RTC開發(fā)中,我們需要數據來表示日期和時間,這些數據通常是年、月、日、時、分、秒。如果我們不用結構體,那么就需要定義6個變量來表示。這樣的話程序的數據結構是松散的,我們的數據結構最好是“高內聚,低耦合”的。所以,用一個結構體來表示更好,無論是從程序的可讀性還是可移植性還是可維護性皆是:
這個時候,我們就可以定義一個結構體來解決這個問題
定義
struct 結構體名{
結構體所包含的變量或數組
};
或者
struct 結構體名{
結構體所包含的變量或數組
}結構別名;
這兩種定義是相等的,區(qū)別就在于一個多了一個結構別名
我們還可以使用
typedef struct 結構體名{
結構體所包含的變量或數組
}結構別名;來定義,他們之間的區(qū)別,主要在于定義結構變量的書寫
如定義一個結構變量 date
使用struct結構定義
struct structname date;
使用typedef struct定義
結構別名 date
使用這種方法我們可以不用寫多余的struct,只需寫結構別名 date就行,這種方式方便了很多
結構體成員
我們定義了結構體后,我們就可以為其定義成員變量
定義結構體成員變量的方法和定義變量沒有什么區(qū)別
數據類型 名字
我們?yōu)樯厦娴慕Y構體A定義成員變量
調用
關于C語言結構體調用其成員的方法,可以用Java中類的方式來理解,這樣會更加的形象
C語言調用成員方法 = 結構別名.a,結構別名.b,結構別名.c
下面寫一個C程序調用實例
這是一個簡單的用戶輸入圖書信息,最后調用的過程
#pragma warning(disable:4996)
//#define _CRT_SECURE_NO_WARNINGS
和(void)如果你使用vs編譯器,需要加上這兩個才不會報錯,其他編譯器我不確定,沒怎么使用
結構體嵌套使用
結構體的嵌套使用和函數一樣,在一個結構體中使用另外一個結構體,他們之間并沒有多大的區(qū)別
用一段代碼來簡單理解
解釋:這里定義了兩個兩個結構體
Date和Book,從里面的代碼可以看到
我們在book結構體中調用了Date,這個時候,就可以通過book訪問Date結構體重的成員變量了
struct Date dd中dd的意思就是通過結構體struct Date定義一個變量
調用
printf("發(fā)售時間: %d-%d-%d\n",book.dd.year, book.dd.moon, book.dd.day);因為他們是嵌套的關系,所以就可以使用一個調用一個的方式進行調用
初始化結構體
先來定義一個結構體
方法一:
struct autonlist *nlists = 0;
直接進行賦值操作
symbol,symbol,nl[0],nl[1],left,left,*right,right會初始化成什么?
先搞清這句話的意思:
struct autonlist *nlists = 0;
等價于:struct autonlist *nlists = NULL;
這句話定義了一個autonlist結構的指針nlists,然后初始化指針為NULL,以防止被后面的語句誤用(主要就是防止未對該指針賦值造成的內存錯誤,野指針操作);
既然這只是對指針的初始化,還使這個指針指向相應的結構變量,當然就不存在對結構的成員進行初始化的操作。
//symbol,nl[0],nl[1],left,*right //這些要自己去顯示的初始化,系統(tǒng)默認的都是危險的,一般在用到結構體時要自己去初始化他們
方法二:
初始化結構體指定某一成員可以使用逗號(.) 運算符
比如只初始化autonlist的price成員
struct autonlist tesk = {.price = 34};
我們還可以不按結構體的順序進行初始化
struct autonlist tesk = {.date = 'chu',
price = 23};
注意:當對多個成員進行初始化時,需要注意格式,其實就是JavaScript對象的書寫格式
{
成員一 ,
成員二,
成員三,
成員四
}
最后一個不需要使用逗號
結構體指針
什么是結構體指針?
指向結構體的指針就叫做結構體指針
定義指針
struct Book *po;po = &book;
定義一個指針,使其指向book這個結構體
注意:這里的指針和數組不同,數組是默認地址就是其[0]號位,二結構體不同,所以需要用到“&”運算符
通過結構體指針訪問結構體成員有兩種方法
1. (*結構體指針).成員名
2. 結構體指針->成員名
問題: 這里的1、為何訪問成員需要加括號()?
這是因為運算符等級的關系
逗號(.)運算符等級高于*號運算符
全部代碼
總結
以上是生活随笔為你收集整理的c语言中定义结构体指针的作用,C语言结构体定义,使用及指针(1)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 高级架构师,精通JAVA/高并发/微服务
- 下一篇: WinCC(portal)和WinCC之