1. 程式人生 > 其它 >C講課筆記:結構體

C講課筆記:結構體

技術標籤: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);