日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學無先后,達者為師

網站首頁 編程語言 正文

一文學會c語言結構體的定義和使用方法_C 語言

作者:撼滄 ? 更新時間: 2022-12-22 編程語言

一、什么是結構體

在實際問題中,一組數據往往具有不同的數據類型;例如在學生信息登記表中,姓名為字符型,學號為整型或字符型,年齡為整型,性別為字符型,成績為整型或實型。因為數據類型不同,顯然不能用一個數組來存放。
在C語言中,可以使用結構體(Struct)來存放一組不同類型的數據。結構體(struct)指的是一種數據結構,是C語言中聚合數據類型(aggregate datatype)的一類。結構體可以被聲明為變量、指針或數組等,用以實現較復雜的數據結構。結構體同時也是一些元素的集合,這些元素稱為結構體的成員(member),且這些成員可以為不同的類型,成員一般用名字訪問。

定義結構體的一般形式為:

struct 結構體名{ ?
? ? 成員列表 ?
};?

在成員表列中可以是幾種基本數據類型,也可以是結構體類型。

struct 類型名{} 變量;后的分號不能漏

例如用結構體來表示學生信息:

struct stu{  
    char *name;  //姓名  
    int num;  //學號  
    char sex;  //性別  
    float score;  //成績  
};

二、結構體變量

結構體也是一種數據類型,可以用來說明變量。例如:

struct stu stu1, stu2; 

定義了兩個變量 stu1 和 stu2,它們都是 stu 類型,都由 4 個成員組成。注意關鍵字struct不能少。

結構體的各個成員在內存中是連續存儲的。stu1、stu2 的內存如下圖所示:

圖片標題

也可以在定義結構體的同時定義結構體變量:

struct stu{  
    char *name;  //姓名  
    int num;  //學號  
    char sex;  //性別  
    float score;  //成績  
} stu1, stu2;  

如果只需要 stu1、stu2 兩個變量,也可以不寫結構體名字:

struct{  //沒有寫 stu  
    char *name;  //姓名  
    int num;  //學號  
    char sex;  //性別  
    float score;  //成績  
} stu1, stu2;  

這樣做書寫簡單,但是因為沒有結構體名,后面就沒法用該結構體定義新的變量。

也可以用宏定義使一個符號常量來表示一個結構類型,例如:

#define STU struct stu  
STU{  
    char *name;  //姓名  
    int num;  //學號  
    char sex;  //性別  
    float score;  //成績  
};  
STU stu1, stu2;

后面我們會學習Windows編程,大部分結構體都是這樣定義的。

typedef和#define用法不同,甚至可以結合起來靈活使用,使用時一定要注意兩者的不同之處。

三、成員的獲取和賦值

在C語言中,使用點號.來獲取結構體中的一個成員,一般格式為:

結構變量名.成員名 ?

例如:

stu1.name;  //第一個學生的姓名  
stu2.score;  //第二個學生的成績  

獲取成員后,就可以對該成員進行賦值了,例如:

stu1.name = “Tom”;
stu2.score = 90.5;

除了可以對成員進行逐一賦值,也可以像數組一樣整體賦值,例如:

struct stu{  
    char *name;  //姓名  
    int num;  //學號  
    char sex;  //性別  
    float score;  //成績  
} stu1, stu2 = { "Tom", 10, 'M', 90 };  

不過整體賦值僅限于上面這樣的情況,也就是定義結構體的同時聲明變量。下面的寫法是錯誤的:

stu2 = { "Tom", 10, 'M', 90 };  

一個完整的示例:

#include <stdio.h>  
#define STU struct stu  
int main(){  
    STU{  
        char *name;  //姓名  
        int num;  //學號  
        char sex;  //性別  
        float score;  //成績  
    };  
    STU stu1;  
    stu1.name = "James Bond";  
    stu1.num = 1;  
    stu1.sex = 'M';  //用M表示男性,W表示女性  
    stu1.score = 99;  
    printf("Hello everyone! My name is %s, a naughty boy, but with good scores(%.2f) and top No.(%d)!", stu1.name, stu1.score, stu1.num);  
    return 0;  
}  

附:結構體數組

指向結構體對象的指針變量既可以指向結構體變量,也可以指向結構體數組中的元素。

struct Student
{
    int num;
    char name[20];
    char sex;
} s1[3];
struct Student *p;

指針可以指向數組,代碼如下:p = s1; p = &s1[0]; 指針移動p++ 移動一個結構體字節大小;

指針訪問成員方式:(*p).num ? p->num。

總結

原文鏈接:https://blog.csdn.net/qq_32832803/article/details/110926157

欄目分類
最近更新