C講課筆記:結構體
阿新 • • 發佈:2021-01-25
技術標籤:C程式設計園地
文章目錄
一、結構體
(一)結構體概述
“結構體型別”是由不同資料型別變數組成的集合體,相當於其它高階語言中的記錄。結構體型別的資料由若干稱為“成員”的資料組成,每個成員既可以是一個基本資料型別的資料,也可以是另一個構造型別的資料。
(二)結構體定義
struct 型別名 {
型別1 成員名1;
型別2 成員名2;
……
};
以上整個部分是一個數據型別,與整型的int是同樣地位。可用typedef把結構體型別替換成一個只有幾個字母的簡短識別符號。
(三)結構體變數的宣告
結構體變數是用說明的結構體型別所定義的一個變數,與結構體型別不是一回事。一個結構體變數所佔位元組數為其所有成員所佔位元組數之和。如struct Student {char name[10]; int age;} a, b; 則表明定義了兩個結構體變數a,b,每個變數佔14個位元組。a,b與int i, j; 中的變數i,j是同樣地位。
(四)結構體成員的引用
引用成員可用以下3種方式:(1)結構體變數名.成員名;(2)指標變數名->成員名:(3)(*指標變數名).成員名。點(.)稱為成員運算子,箭頭(->)稱為結構指向運算子。
二、案例演示
(一)定義與使用結構體
1、編寫程式 - 定義與使用結構體.c
/*
功能:定義和使用結構體
作者:華衛
日期:2013年12月3日
*/
#include <stdio.h>
#include <string.h>
//定義結構體
struct Student
{
int num;
char name[20];
char sex[4];
int age;
double score;
char address[30];
};
void main() {
struct Student stu1, stu2, stu3; // 宣告結構體變數
//給第一個學生賦值
stu1.num = 1;
strcpy(stu1.name, "李平");
strcpy(stu1.sex, "男");
stu1.age = 18;
stu1.score = 98.5;
strcpy(stu1.address, "瀘州江陽區瓦窯壩35#");
//給第二個學生賦值
stu2.num = 2;
strcpy(stu2.name, "王紅");
strcpy(stu2.sex, "女");
stu2.age = 19;
stu2.score = 99.5;
strcpy(stu2.address, "瀘州龍馬潭區瀟湘路15#");
//給第三個學生賦值
stu3.num = 3;
strcpy(stu3.name, "張楓");
strcpy(stu3.sex, "男");
stu3.age = 21;
stu3.score = 69.0;
strcpy(stu3.address, "瀘州龍馬潭區瀟湘路15#");
//輸出三個學生的資訊
printf("學號\t姓名\t性別\t年齡\t成績\t家庭住址\n");
printf("%d\t%s\t%s\t%d\t%.2f\t%s\n", stu1.num, stu1.name, stu1.sex, stu1.age, stu1.score, stu1.address);
printf("%d\t%s\t%s\t%d\t%.2f\t%s\n", stu2.num, stu2.name, stu2.sex, stu2.age, stu2.score, stu2.address);
printf("%d\t%s\t%s\t%d\t%.2f\t%s\n", stu3.num, stu3.name, stu3.sex, stu3.age, stu3.score, stu3.address);
}
2、執行程式,檢視結果
3、課堂練習:利用結構體陣列來完成上述任務。
(二)使用指標指向結構體
1、編寫程式 - 使用指標指向結構體.c
/*
功能:使用指標指向結構體
作者:華衛
日期:2013年12月3日
*/
#include <stdio.h>
#include <string.h>
//定義結構體
struct Student
{
int num;
char name[20];
char sex[4];
int age;
double score;
char address[30];
};
void main() {
struct Student stu1, stu2, stu3; // 宣告結構體變數
struct Student *s1, *s2, *s3; // 宣告結構體指標
s1 = &stu1;
s2 = &stu2;
s3 = &stu3;
//給第一個學生賦值
s1->num = 1;
strcpy(s1->name, "李平");
strcpy(s1->sex, "男");
s1->age = 18;
s1->score = 98.5;
strcpy(s1->address, "瀘州江陽區瓦窯壩35#");
//給第二個學生賦值
s2->num = 2;
strcpy(s2->name, "王紅");
strcpy(s2->sex, "女");
s2->age = 19;
s2->score = 99.5;
strcpy(s2->address, "瀘州龍馬潭區瀟湘路15#");
//給第三個學生賦值
s3->num = 3;
strcpy(s3->name, "張楓");
strcpy(s3->sex, "男");
s3->age = 21;
s3->score = 69.0;
strcpy(s3->address, "瀘州龍馬潭區瀟湘路15#");
//輸出三個學生的資訊
printf("學號\t姓名\t性別\t年齡\t成績\t家庭住址\n");
printf("%d\t%s\t%s\t%d\t%.2f\t%s\n", s1->num, s1->name, s1->sex, s1->age, s1->score, s1->address);
printf("%d\t%s\t%s\t%d\t%.2f\t%s\n", s2->num, s2->name, s2->sex, s2->age, s2->score, s2->address);
printf("%d\t%s\t%s\t%d\t%.2f\t%s\n", s3->num, s3->name, s3->sex, s3->age, s3->score, s3->address);
}
2、執行程式,檢視結果
- 輸出三個學生資訊,程式碼還可以這樣寫:
printf("學號\t姓名\t性別\t年齡\t成績\t家庭住址\n");
printf("%d\t%s\t%s\t%d\t%.2f\t%s\n", (*s1).num, (*s1).name, (*s1).sex, (*s1).age, (*s1).score, (*s1).address);
printf("%d\t%s\t%s\t%d\t%.2f\t%s\n", (*s2).num, (*s2).name, (*s2).sex, (*s2).age, (*s2).score, (*s2).address);
printf("%d\t%s\t%s\t%d\t%.2f\t%s\n", (*s3).num, (*s3).name, (*s3).sex, (*s3).age, (*s3).score, (*s3).address);