日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

c语言中定义结构体指针的作用,C语言结构体定义,使用及指针(1)

發布時間:2024/3/26 编程问答 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 c语言中定义结构体指针的作用,C语言结构体定义,使用及指针(1) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

前言

C語言中的結構體作為一大難點,并且對于需要學習數據結構的同學來說,這個結構是每次上課都會遇到的,所以,我們只有更深層次的理解結構體的知識,才能更好的掌握數據結構

結構體用處

結構體到底有什么用?

比如,在STM32的RTC開發中,我們需要數據來表示日期和時間,這些數據通常是年、月、日、時、分、秒。如果我們不用結構體,那么就需要定義6個變量來表示。這樣的話程序的數據結構是松散的,我們的數據結構最好是“高內聚,低耦合”的。所以,用一個結構體來表示更好,無論是從程序的可讀性還是可移植性還是可維護性皆是:

這個時候,我們就可以定義一個結構體來解決這個問題

定義

struct 結構體名{

結構體所包含的變量或數組

};

或者

struct 結構體名{

結構體所包含的變量或數組

}結構別名;

這兩種定義是相等的,區別就在于一個多了一個結構別名

我們還可以使用

typedef struct 結構體名{

結構體所包含的變量或數組

}結構別名;來定義,他們之間的區別,主要在于定義結構變量的書寫

如定義一個結構變量 date

使用struct結構定義

struct structname date;

使用typedef struct定義

結構別名 date

使用這種方法我們可以不用寫多余的struct,只需寫結構別名 date就行,這種方式方便了很多

結構體成員

我們定義了結構體后,我們就可以為其定義成員變量

定義結構體成員變量的方法和定義變量沒有什么區別

數據類型 名字

我們為上面的結構體A定義成員變量

調用

關于C語言結構體調用其成員的方法,可以用Java中類的方式來理解,這樣會更加的形象

C語言調用成員方法 = 結構別名.a,結構別名.b,結構別名.c

下面寫一個C程序調用實例

這是一個簡單的用戶輸入圖書信息,最后調用的過程

#pragma warning(disable:4996)

//#define _CRT_SECURE_NO_WARNINGS

和(void)如果你使用vs編譯器,需要加上這兩個才不會報錯,其他編譯器我不確定,沒怎么使用

結構體嵌套使用

結構體的嵌套使用和函數一樣,在一個結構體中使用另外一個結構體,他們之間并沒有多大的區別

用一段代碼來簡單理解

解釋:這里定義了兩個兩個結構體

Date和Book,從里面的代碼可以看到

我們在book結構體中調用了Date,這個時候,就可以通過book訪問Date結構體重的成員變量了

struct Date dd中dd的意思就是通過結構體struct Date定義一個變量

調用

printf("發售時間: %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 //這些要自己去顯示的初始化,系統默認的都是危險的,一般在用到結構體時要自己去初始化他們

方法二:

初始化結構體指定某一成員可以使用逗號(.) 運算符

比如只初始化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)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。