C语言学习—结构体的定义与使用
文章目錄
- 前言
- 一、結構體的概念
- 1.結構體是什么?
- 2.如何定義一個結構體?
- 3.結構體變量
- 4.結構體變量的初始化
- 4.1結構體成員的訪問
- 4.2結構體變量的初始化
- 二、結構體的使用
- 1.如何去使用結構體?
- 1.1結構體的普通變量如如何訪問結構體成員
- 1.2結構體的指針變量如何訪問其成員
- 2.結構體數組
- 總結
前言
在C語言中,結構體類型屬于一種構造類型(其他的構造類型還有:數組類型,聯合類型)。本文主要介紹關于結構體以下幾部分。
一、結構體的概念
1.結構體是什么?
在實際的應用中,往往變量的類型復雜多變,我們僅僅使用C語言內置的類型無法準確的去定義變量,所以引出了結構體這個概念。也就是說,為了描述復雜類型的個體,只用C語言基礎的內置類型不能完整的表述,而結構體就可以很好的解決這個問題。
結構體本質上還是一種數據類型,但它可以包括若干個“成員”,每個成員的類型可以相同也可以不同,也可以是基本數據類型或者又是一個構造類型。
2.如何定義一個結構體?
如何定義一個結構體,一般定義的形式如下所示:
//結構體的定義 struct + 結構體名稱 {成員列表; };【注】在定義結構體的時候,大括號最后一定不要忘記分號:’;'
我們舉個簡單的例子:我們定義一個名為Student的結構體,該結構體的成員包括:姓名,學號,性別,年齡,總成績等。
結構體是一種集合,它里面包含了多個變量或數組,它們的類型可以相同,也可以不同,每個這樣的變量或數組都稱為結構體的成員。在上面的例子中,Student為結構體名,它包含了5個成員,分別是:name,id,sex,age,score。特別注意,結構體成員的定義方式與變量和數組的定義方式相同,只是不能初始化。
3.結構體變量
既然結構體是一種數據類型,那它就像C語言基礎的內置類型一樣,可以去定義變量,下面就舉個簡單的例子:
(1)結構體變量的定義可以放在結構體的聲明之后:
(2)結構體變量的定義也可以在結構體聲明的同時定義,這樣就簡化了代碼:
struct Student //定義一個名為Student的結構體 {char name[20]; //姓名int id; //學號char sex; //性別(1:男 0:女)int age; //年齡int score; //總成績 }stu; //在結構體聲明的同時定義一個結構體變量stu在實際的定義中,往往使用第二種方法
struct Student stu1; //C語言中,利用結構體去定義變量的時候,必須加上struct,不能省略
Student stu2; //C++中,利用結構體去定義變量的時候,可以省略struct,可直接使用結構體名去定義
(3)還可以使用匿名結構體來定義結構體變量
struct //沒有結構體名 {char name[20]; //姓名int id; //學號char sex; //性別(1:男 0:女)int age; //年齡int score; //總成績 }stu; //使用匿名結構體來定義一個結構體變量stu但要注意的是這樣的方式雖然簡單,但不能再次定義新的結構體變量了,也就是說,這種定義方式只能定義一次,不能重新再去定義別的變量。在使用的時候,要尤其注意。
4.結構體變量的初始化
4.1結構體成員的訪問
雖然結構類似一個數組,只是數組元素的數據類型是相同的,而結構中元素的數據類型是可以不同的。但結構不能像數組那樣使用下標去訪問其中的各個元素,而應該用結構成員運算符點(.)。即訪問成員的一般形式是:
結構體變量名.成員名
舉個簡單的例子:
struct Student stu; //定義一個結構體變量stu
stu.name; //通過stu.去訪問結構體中的成員name,表示學生stu的姓名name
stu.age; //通過stu.去訪問結構體中的成員age,表示學生stu的年齡age
我們可以通過運算符(.)去訪問結構體成員,例如:
當我們使用結構體變量去訪問成員的時候,輸入運算符.其后面就會出現結構體成員列表,我們選擇要訪問的成員即可。這也說明我們定義的結構體變量是正確的。
4.2結構體變量的初始化
接上面結構體Student的例子,這里我們對其結構體變量stu1初始化:
struct Student stu1 = { “張飛”, 001, 1, 20, 400 }; //姓名:張飛,學號:001,性別:男(1表示男,0表示女),年齡:20,總成績:400
struct Student stu1; //若不給結構體初始值,則里面的值均為【隨機值】 struct Student stu2 = { "Feizhang" }; //若給結構體只賦值一部分,則后面的全部賦為0 struct Student* stup = &stu1; //定義一個結構體類型的指針stup,指向stu1 struct Student* stuq; //理論上stuq為隨機值,但在這里指向0Xcccccccc(Debug模式下會優化為cccccccc) struct Student Stu_arr[10]; //定義一個結構體數組,若不給初始值,則為隨機值二、結構體的使用
1.如何去使用結構體?
1.1結構體的普通變量如如何訪問結構體成員
結構體普通變量如何訪問其成員:C語言規定,結構體的普通成員可以通過運算符“點.”去訪問其成員,例如:
struct Student stu1 = { "Bulv", 20, 1001, 1, 90 }; //定義結構體變量stu1并初始化 struct Student stu2 = { "Feizhang", 22, 1002, 1, 95 }; //定義結構體變量stu2并初始化 stu1.id = 1003; //通過結構體變量stu1去訪問成員id,并將其值修改為1003 printf("%s\n", stu1.name); //打印學生stu1的姓名 printf("%d\n", stu1.age); //打印學生stu1的年齡 strcpy_s(stu1.name, 10, "caopi"); //修改stu1的第一個變量name的值(char類型不能直接賦值)1.2結構體的指針變量如何訪問其成員
結構體的指針變量如何訪問其成員:可以通過箭頭符號的方式去訪問其成員:
(*p).name == p -> name //左右兩種訪問方式等價
舉個簡單的例子:
struct Student stu = { "劉備", 20, 1001, 1, 90 }; //定義結構體變量stu1并初始化 struct Student *p = &stu; //定義一個結構體指針p去指向結構體變量stu (*p).age = 23; //等價于p -> age = 23; //將年齡修改為23 strcpy_s((*p).name, "張飛");//注意點和星號的優先級【注】結構體成員如果是字符串,不能直接通過賦值號“=”去修改值,可以通過C語言中的拷貝函數strcpy去修改值。
2.結構體數組
在上面的例子中,我們都只是定義一個結構體變量,但在實際中,結構體變量不止一個,所以就需要一個數組來去存儲。對比一般數組的定義,結構體數組也可以用相同的方式去定義、使用。下面舉個例子:
struct Student //定義一個名為Student結構體 {char name[20]; //姓名int age; //年齡int id; //學號 }stu[5]; //定義一個結構體數組stu[5],其長度是5,相當于要記錄5個學生的信息如何去使用結構體數組呢?如何訪問結構體數組呢?我們看個簡單的例子:
總結
總結:以上是對結構體的定義以及如何使用做了簡單的介紹,C語言中,我們實際要求的變量類型不能僅僅只通過C語言基礎內置類型來定義,所以就引出了結構體,利用結構體來定義我們的變量,可以滿足我們的要求,但是要注意的幾點就是:
1.結構體如何定義,在定義的時候可以同時定義一個結構體變量,末尾必須以分好結尾;
2.結構體變量如何去訪問其成員,可以通過運算符"."去訪問;結構體指針變量如何去訪問成員,可以通過箭頭的形式去訪問,例如:(*p).name == p -> name //左右兩種訪問方式等價。
總結
以上是生活随笔為你收集整理的C语言学习—结构体的定义与使用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Linux查看防火墙,开放端口
- 下一篇: OMRON TIMER