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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

C语言再学习 -- 关键字struct(转)

發(fā)布時(shí)間:2025/3/15 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C语言再学习 -- 关键字struct(转) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

參看:C語言再學(xué)習(xí) -- 結(jié)構(gòu)和其他數(shù)據(jù)形式

參看:c語言中的關(guān)鍵字struct(結(jié)構(gòu)體)的用法

整理總結(jié):

結(jié)構(gòu)體的一般定義形式為:

標(biāo)簽(tag)字段允許為成員列表提供一個(gè)名字,這樣它就可以在后續(xù)的聲明中使用。標(biāo)簽允許多個(gè)聲明使用同一個(gè)成員列表,并且創(chuàng)建同一種類型的結(jié)構(gòu)。

struct 標(biāo)簽{ 類型名1 成員名1;類型名2 成員名2;……類型名n 成員名n;   }結(jié)構(gòu)體變量;
1、如果 標(biāo)簽?存在,結(jié)構(gòu)體變量 不存在,定義如下: struct Student{char name[20];//姓名int age;//年齡float height;//身高 };struct Student stu //Student 為標(biāo)簽 stu 為結(jié)構(gòu)體變量
2、如果 結(jié)構(gòu)體變量 存在,?標(biāo)簽?可有可無,定義如下: struct Student{ //Student 可有可無char name[20];//姓名int age;//年齡float height;//身高 }stu;
3、使用typedef起別名,標(biāo)簽可有可無,結(jié)構(gòu)體變量 位置變?yōu)樵?類型名 typedef struct Student{ //Student 可有可無char name[20];//姓名int age;//年齡float height;//身高 }Stu; //Stu 為類型名Stu stu; //Stu 為類型名,stu 為結(jié)構(gòu)體變量
4、注意,字符串初始化不能直接賦值,需要使用 strcpy 函數(shù) #include <stdio.h> #include <string.h> typedef struct { int n; float m; char name[20]; }Ptr; int main (void) { Ptr p; //Ptr p = {11, 12.9, "hello"}; strcpy (p.name, "hello"); //注意字符串不能直接賦值 p.n = 11; p.m = 12.9; printf ("n = %d, name = %s, m = %g\n", p.n, p.name, p.m); return 0; } 輸出結(jié)果: n = 11, name = hello, m = 12.9

一、結(jié)構(gòu)體的定義

1、定義形式

結(jié)構(gòu)體內(nèi)部的元素,也就是組成成分,我們一般稱為"成員"。
結(jié)構(gòu)體的一般定義形式為:

struct 結(jié)構(gòu)體名{ 類型名1 成員名1;類型名2 成員名2;……類型名n 成員名n;   };

2、舉例

比如,我們定義一個(gè)學(xué)生

struct Student{char name[20];//姓名int age;//年齡float height;//身高 };

上面定義了一個(gè)叫做Student的結(jié)構(gòu)體,共有name、age、height3個(gè)成員。呵呵,看到這里是否有點(diǎn)面向?qū)ο蟮奈兜滥?#xff0c;其實(shí)這跟面向?qū)ο笸耆莾纱a事,只能說感覺有點(diǎn)像。

二、結(jié)構(gòu)體變量的定義

前面只是定義了名字為Student的結(jié)構(gòu)體類型,并非定義了一個(gè)結(jié)構(gòu)體變量,就像int一樣,只是一種類型。
接下來定義一個(gè)結(jié)構(gòu)體變量,方式有好多種。

1、先定義結(jié)構(gòu)體類型,再定義變量struct Student{char name[20];//姓名int age;//年齡float height;//身高 }; struct Student stu;

定義了一個(gè)結(jié)構(gòu)體變量,變量名為stu。struct和Student是連著使用的。

2、定義結(jié)構(gòu)體類型的同時(shí)定義變量struct Student{char name[20];//姓名int age;//年齡float height;//身高 }stu;
結(jié)構(gòu)體變量名為stu
3、直接定義結(jié)構(gòu)體類型變量,省略類型名struct {char name[20];//姓名int age;//年齡float height;//身高 }stu;

結(jié)構(gòu)體變量名為stu

三、結(jié)構(gòu)體的注意點(diǎn)

1、不允許對(duì)結(jié)構(gòu)體本身遞歸定義

如下做法是錯(cuò)誤的,注意第3行

struct Student {int age;struct Student stu;};

2、結(jié)構(gòu)體內(nèi)可以包含別的結(jié)構(gòu)體 struct Date {int year;int month;int day;};struct Student {char name[20];struct Date birthday; //................(1)};
注:(1)行
3、定義結(jié)構(gòu)體類型,只是說明了該類型的組成情況,并沒有給它分配存儲(chǔ)空間,就像系統(tǒng)不為int類型本身分配空間一樣。只有當(dāng)定義屬于結(jié)構(gòu)體類型的變量時(shí),系統(tǒng)才會(huì)分配存儲(chǔ)空間給該變量struct Student {char name[20];int age;};

//................在此之前,系統(tǒng)并沒有分配存儲(chǔ)空間
struct Student stu;//...............當(dāng)執(zhí)行到該6行時(shí),系統(tǒng)才會(huì)分配存儲(chǔ)空間給stu變量。

4、結(jié)構(gòu)體變量占用的內(nèi)存空間是其成員所占內(nèi)存之和,而且各成員在內(nèi)存中按定義的順序依次排列

比如下面的Student結(jié)構(gòu)體:

struct Student {char ch; int num; float height; };

根據(jù)結(jié)構(gòu)體內(nèi)存對(duì)齊與補(bǔ)齊規(guī)則,這個(gè)Student變量共占用內(nèi)存:12字節(jié)。


考慮一個(gè)問題, 空結(jié)構(gòu)體所占內(nèi)存多大?

#include <stdio.h>struct strudent {}stu;int main (void) {printf ("sizeof (stu) = %d\n", sizeof (stu));return 0; } 輸出結(jié)果: 在C中, sizeof (stu) = 0 在C++中, sizeof (stu) = 1

四、結(jié)構(gòu)體的初始化

將各成員的初值,按順序地放在一對(duì)大括號(hào){}中,并用逗號(hào)分隔,一一對(duì)應(yīng)賦值。
比如初始化Student結(jié)構(gòu)體變量stu

struct Student {char name[20];int age;};struct Student stu = {"MJ", 27};

只能在定義變量的同時(shí)進(jìn)行初始化賦值,初始化賦值和變量的定義不能分開,下面的做法是錯(cuò)誤的:

struct Student stu; stu = {"MJ", 27};

五、結(jié)構(gòu)體的使用

1、一般對(duì)結(jié)構(gòu)體變量的操作是以成員為單位進(jìn)行的,引用的一般形式為:結(jié)構(gòu)體變量名.成員名 struct Student {char name[20];int age;};struct Student stu; stu.age = 27; // 訪問stu的age成員........(2)

(2)行對(duì)結(jié)構(gòu)體的age成員進(jìn)行了賦值。"."稱為成員運(yùn)算符,它在所有運(yùn)算符中優(yōu)先級(jí)最高

2、如果某個(gè)成員也是結(jié)構(gòu)體變量,可以連續(xù)使用成員運(yùn)算符"."訪問最低一級(jí)成員struct Date {int year;int month;int day;};struct Student {char name[20];struct Date birthday;};struct Student stu;stu.birthday.year = 1986;stu.birthday.month = 9;stu.birthday.day = 10;
3、相同類型的結(jié)構(gòu)體變量之間可以進(jìn)行整體賦值struct Student {char name[20];int age;};struct Student stu1 = {"MJ", 27};struct Student stu2 = stu1; // 將stu1直接賦值給stu2printf("age is %d", stu2.age);

輸出結(jié)果為: age is 27

六、結(jié)構(gòu)體數(shù)組

1、定義

跟結(jié)構(gòu)體變量一樣,結(jié)構(gòu)體數(shù)組也有3種定義方式
(1)、

struct Student {char name[20];int age; }; struct Student stu[5]; //定義1

(2)、

struct Student {char name[20];int age; } stu[5]; //定義2

(3)、

struct {char name[20];int age; } stu[5]; //定義3

上面3種方式,都是定義了一個(gè)變量名為stu的結(jié)構(gòu)體數(shù)組,數(shù)組元素個(gè)數(shù)是5

2、初始化struct {char name[20];int age; } stu[2] = { {"MJ", 27}, {"JJ", 30} };

也可以用數(shù)組下標(biāo)訪問每一個(gè)結(jié)構(gòu)體元素,跟普通數(shù)組的用法是一樣的

七、結(jié)構(gòu)體作為函數(shù)參數(shù)

將結(jié)構(gòu)體變量作為函數(shù)參數(shù)進(jìn)行傳遞時(shí),其實(shí)傳遞的是全部成員的值,也就是將實(shí)參中成員的值一一賦值給對(duì)應(yīng)的形參成員。因此,形參的改變不會(huì)影響到實(shí)參。


96E7DE2F-5EFE-4B92-A0A4-EE196E126A3D.png
  • 首先在(3)行定義了一個(gè)結(jié)構(gòu)體類型Student
  • 在(4)行定義了一個(gè)結(jié)構(gòu)體變量stu,并在(5)行將其作為實(shí)參傳入到test函數(shù)
    輸出結(jié)果為:

    24165811-5748e293af5f4dec8f1fb855727a3e76.png 形參是改變了,但是實(shí)參一直沒有變過。

    八、指向結(jié)構(gòu)體的指針變量

    1、每個(gè)結(jié)構(gòu)體變量都有自己的存儲(chǔ)空間和地址,因此指針也可以指向結(jié)構(gòu)體變量
    2、結(jié)構(gòu)體指針變量的定義形式:struct 結(jié)構(gòu)體名稱 *指針變量名
    3、 有了指向結(jié)構(gòu)體的指針,那么就有3種訪問結(jié)構(gòu)體成員的方式
    (1)、結(jié)構(gòu)體變量名.成員名
    (2)、(*指針變量名).成員名
    (3)、指針變量名->成員名

    38622765-4312-4EEE-8D42-148230B72355.png
    輸出結(jié)果為:

    24170725-fe1c21f2d61e4db1a3ea18223098c21b.png


文/冷月嬋(簡(jiǎn)書作者)
原文鏈接:http://www.jianshu.com/p/11338c411bec
著作權(quán)歸作者所有,轉(zhuǎn)載請(qǐng)聯(lián)系作者獲得授權(quán),并標(biāo)注“簡(jiǎn)書作者”。

總結(jié)

以上是生活随笔為你收集整理的C语言再学习 -- 关键字struct(转)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。