<em id="0a85b"><option id="0a85b"></option></em>

<abbr id="0a85b"></abbr>

      <nobr id="0a85b"></nobr>
        <tr id="0a85b"></tr>
        9久久伊人精品综合,亚洲一区精品视频在线,成 人免费va视频,国产一区二区三区黄网,99国产精品永久免费视频,亚洲毛片多多影院,精品久久久无码人妻中文字幕,无码国产欧美一区二区三区不卡
        學(xué)習(xí)啦>學(xué)習(xí)英語>專業(yè)英語>計(jì)算機(jī)英語>

        c語言中struct的用法

        時(shí)間: 長思709 分享

          c語言中struct的用法的用法你知道嗎?下面小編就跟你們?cè)敿?xì)介紹下c語言中struct的用法的用法,希望對(duì)你們有用。

          c語言中struct的用法的用法如下:

          基本定義:結(jié)構(gòu)體,通俗講就像是打包封裝,把一些有共同特征(比如同屬于某一類事物的屬性,往往是某種業(yè)務(wù)相關(guān)屬性的聚合)的變量封裝在內(nèi)部,通過一定方法訪問修改內(nèi)部變量。

          結(jié)構(gòu)體定義:

          第一種:只有結(jié)構(gòu)體定義

          [cpp] view plain copy 在CODE上查看代碼片派生到我的代碼片

          01.struct stuff{

          02. char job[20];

          03. int age;

          04. float height;

          05.};

          第二種:附加該結(jié)構(gòu)體類型的“結(jié)構(gòu)體變量”的初始化的結(jié)構(gòu)體定義

          [cpp] view plain copy 在CODE上查看代碼片派生到我的代碼片

          01.//直接帶變量名Huqinwei

          02.struct stuff{

          03. char job[20];

          04. int age;

          05. float height;

          06.}Huqinwei;

          也許初期看不習(xí)慣容易困惑,其實(shí)這就相當(dāng)于:

          [cpp] view plain copy 在CODE上查看代碼片派生到我的代碼片

          01.struct stuff{

          02. char job[20];

          03. int age;

          04. float height;

          05.};

          06.struct stuff Huqinwei;

          第三種:如果該結(jié)構(gòu)體你只用一個(gè)變量Huqinwei,而不再需要用

          [cpp] view plain copy 在CODE上查看代碼片派生到我的代碼片

          01.struct stuff yourname;

          去定義第二個(gè)變量。

          那么,附加變量初始化的結(jié)構(gòu)體定義還可進(jìn)一步簡化出第三種:

          [cpp] view plain copy 在CODE上查看代碼片派生到我的代碼片

          01.struct{

          02. char job[20];

          03. int age;

          04. float height;

          05.}Huqinwei;

          把結(jié)構(gòu)體名稱去掉,這樣更簡潔,不過也不能定義其他同結(jié)構(gòu)體變量了——至少我現(xiàn)在沒掌握這種方法。

          結(jié)構(gòu)體變量及其內(nèi)部成員變量的定義及訪問:

          繞口吧?要分清結(jié)構(gòu)體變量和結(jié)構(gòu)體內(nèi)部成員變量的概念。

          就像剛才的第二種提到的,結(jié)構(gòu)體變量的聲明可以用:

          [cpp] view plain copy 在CODE上查看代碼片派生到我的代碼片

          01.struct stuff yourname;

          其成員變量的定義可以隨聲明進(jìn)行:

          [cpp] view plain copy 在CODE上查看代碼片派生到我的代碼片

          01.struct stuff Huqinwei = {"manager",30,185};

          也可以考慮結(jié)構(gòu)體之間的賦值:

          [cpp] view plain copy 在CODE上查看代碼片派生到我的代碼片

          01. struct stuff faker = Huqinwei;

          02.//或 struct stuff faker2;

          03.// faker2 = faker;

          04.打印,可見結(jié)構(gòu)體的每一個(gè)成員變量一模一樣

          如果不使用上邊兩種方法,那么成員數(shù)組的操作會(huì)稍微麻煩(用for循環(huán)可能好點(diǎn))

          [cpp] view plain copy 在CODE上查看代碼片派生到我的代碼片

          01.Huqinwei.job[0] = 'M';

          02.Huqinwei.job[1] = 'a';

          03.Huqinwei.age = 27;

          04.nbsp;Huqinwei.height = 185;

          結(jié)構(gòu)體成員變量的訪問除了可以借助符號(hào)".",還可以用"->"訪問(下邊會(huì)提)。

          指針和數(shù)組:

          這是永遠(yuǎn)繞不開的話題,首先是引用:

          [cpp] view plain copy 在CODE上查看代碼片派生到我的代碼片

          01.struct stuff *ref = &Huqinwei;

          02.ref->age = 100;

          03.printf("age is:%d\n",Huqinwei.age);

          指針也是一樣的

          [cpp] view plain copy 在CODE上查看代碼片派生到我的代碼片

          01.struct stuff *ptr;

          02.ptr->age = 200;

          03.printf("age is:%d\n",Huqinwei.age);

          結(jié)構(gòu)體也不能免俗,必須有數(shù)組:

          [cpp] view plain copy 在CODE上查看代碼片派生到我的代碼片

          01.struct test{

          02. int a[3];

          03. int b;

          04.};

          05.//對(duì)于數(shù)組和變量同時(shí)存在的情況,有如下定義方法:

          06. struct test student[3] = {{{66,77,55},0},

          07. {{44,65,33},0},

          08. {{46,99,77},0}};

          09.//特別的,可以簡化成:

          10. struct test student[3] = {{66,77,55,0},

          11. {44,65,33,0},

          12. {46,99,77,0}};

          變長結(jié)構(gòu)體

          可以變長的數(shù)組

          [cpp] view plain copy 在CODE上查看代碼片派生到我的代碼片

          01.#include <stdio.h>

          02.#include <malloc.h>

          03.#include <string.h>

          04.typedef struct changeable{

          05. int iCnt;

          06. char pc[0];

          07.}schangeable;

          08.

          09.main(){

          10. printf("size of struct changeable : %d\n",sizeof(schangeable));

          11.

          12. schangeable *pchangeable = (schangeable *)malloc(sizeof(schangeable) + 10*sizeof(char));

          13. printf("size of pchangeable : %d\n",sizeof(pchangeable));

          14.

          15. schangeable *pchangeable2 = (schangeable *)malloc(sizeof(schangeable) + 20*sizeof(char));

          16. pchangeable2->iCnt = 20;

          17. printf("pchangeable2->iCnt : %d\n",pchangeable2->iCnt);

          18. strncpy(pchangeable2->pc,"hello world",11);

          19. printf("%s\n",pchangeable2->pc);

          20. printf("size of pchangeable2 : %d\n",sizeof(pchangeable2));

          21.}

          運(yùn)行結(jié)果

          [cpp] view plain copy 在CODE上查看代碼片派生到我的代碼片

          01.size of struct changeable : 4

          02.size of pchangeable : 4

          03.pchangeable2->iCnt : 20

          04.hello world

          05.size of pchangeable2 : 4

          結(jié)構(gòu)體本身長度就是一個(gè)int長度(這個(gè)int值通常只為了表示后邊的數(shù)組長度),后邊的數(shù)組長度不計(jì)算在內(nèi),但是該數(shù)組可以直接使用。

          (說后邊是個(gè)指針吧?指針也占長度!這個(gè)是不占的!原理很簡單,這個(gè)東西完全是數(shù)組后邊的尾巴,malloc開辟的是一片連續(xù)空間。其實(shí)這不應(yīng)該算一個(gè)機(jī)制,感覺應(yīng)該更像一個(gè)技巧吧)

          結(jié)構(gòu)體嵌套:

          結(jié)構(gòu)體嵌套其實(shí)沒有太意外的東西,只要遵循一定規(guī)律即可:

          [cpp] view plain copy 在CODE上查看代碼片派生到我的代碼片

          01.//對(duì)于“一錘子買賣”,只對(duì)最終的結(jié)構(gòu)體變量感興趣,其中A、B也可刪,不過最好帶著

          02.struct A{

          03. struct B{

          04. int c;

          05. }

          06. b;

          07.}

          08.a;

          09.//使用如下方式訪問:

          10.a.b.c = 10;

          特別的,可以一邊定義結(jié)構(gòu)體B,一邊就使用上:

          [cpp] view plain copy 在CODE上查看代碼片派生到我的代碼片

          01.struct A{

          02. struct B{

          03. int c;

          04. }b;

          05.

          06. struct B sb;

          07.

          08.}a;

          使用方法與測試:

          [cpp] view plain copy 在CODE上查看代碼片派生到我的代碼片

          01. a.b.c = 11;

          02. printf("%d\n",a.b.c);

          03. a.sb.c = 22;

          04. printf("%d\n",a.sb.c);

          05.結(jié)果無誤。

          結(jié)構(gòu)體與函數(shù):

          關(guān)于傳參,首先:

          [cpp] view plain copy 在CODE上查看代碼片派生到我的代碼片

          01.void func(int);

          02.func(a.b.c);

          把結(jié)構(gòu)體中的int成員變量當(dāng)做和普通int變量一樣的東西來使用,是不用腦子就想到的一種方法。

          另外兩種就是傳遞副本和指針了 :

          [cpp] view plain copy 在CODE上查看代碼片派生到我的代碼片

          01.//struct A定義同上

          02.//設(shè)立了兩個(gè)函數(shù),分別傳遞struct A結(jié)構(gòu)體和其指針。

          03.void func1(struct A a){

          04. printf("%d\n",a.b.c);

          05.}

          06.void func2(struct A* a){

          07. printf("%d\n",a->b.c);

          08.}

          09.main(){

          10. a.b.c = 112;

          11. struct A * pa;

          12. pa = &a;

          13. func1(a);

          14. func2(&a);

          15. func2(pa);

          16.}

          占用內(nèi)存空間:

          struct結(jié)構(gòu)體,在結(jié)構(gòu)體定義的時(shí)候不能申請(qǐng)內(nèi)存空間,不過如果是結(jié)構(gòu)體變量,聲明的時(shí)候就可以分配——兩者關(guān)系就像C++的類與對(duì)象,對(duì)象才分配內(nèi)存(不過嚴(yán)格講,作為代碼段,結(jié)構(gòu)體定義部分“.text”真的就不占空間了么?當(dāng)然,這是另外一個(gè)范疇的話題)。

          結(jié)構(gòu)體的大小是結(jié)構(gòu)體所含變量大小的總和,并且不能用"char a[]"這種彈性(flexible)變量,必須明確大小,下面打印輸出上述結(jié)構(gòu)體的size:

          [cpp] view plain copy 在CODE上查看代碼片派生到我的代碼片

          01. printf("size of struct man:%d\n",sizeof(struct man));

          02. printf("size:%d\n",sizeof(Huqinwei));

          03.結(jié)果毫無懸念,都是28:分別是char數(shù)組20,int變量4,浮點(diǎn)變量4.

          和C++的類不一樣,結(jié)構(gòu)體不可以給結(jié)構(gòu)體內(nèi)部變量初始化,。

          如下,為錯(cuò)誤示范:

          [cpp] view plain copy 在CODE上查看代碼片派生到我的代碼片

          01.#include<stdio.h>

          02.//直接帶變量名Huqinwei

          03.struct stuff{

          04.// char job[20] = "Programmer";

          05.// char job[];

          06.// int age = 27;

          07.// float height = 185;

          08.}Huqinwei;

          PS:結(jié)構(gòu)體的聲明也要注意位置的,作用域不一樣。

          C++的結(jié)構(gòu)體變量的聲明定義和C有略微不同,說白了就是更“面向?qū)ο?rdquo;風(fēng)格化,要求更低。

          那么熟悉了常用方法,都要注意哪些常犯錯(cuò)誤呢,見C語言結(jié)構(gòu)體常見錯(cuò)誤。

          .

        533411 主站蜘蛛池模板: 国产一卡2卡三卡4卡免费网站| 欧美成人在线免费| 国产精品成人一区二区三区 | 久久青青草原亚洲AV无码麻豆| 日本亚洲欧洲另类图片| 成年女人片免费视频播放A| 成人av在线播放不卡| 69精品无人区国产一区| 福利视频一区二区在线| 日本视频一两二两三区| 99热国产这里只有精品9| 中文字幕av一区二区三区欲色| 国产一区二区三区av在线无码观看| 91福利国产在线在线播放| 国产午夜福利在线观看播放 | 国产成人1024精品免费| 亚洲欧美综合人成在线| 国产精品美女久久久久| 熟女视频一区二区三区嫩草| 国产一区二区午夜福利久久| 久久夜色撩人精品国产av| 99re视频在线| 亚洲国产成人久久一区久久| 丰满的熟妇岳中文字幕| 欧美z0zo人禽交| 国产精品日日摸夜夜添夜夜添2021 | 亚洲av成人一区二区| 国产99视频精品免费视频76| 国产精品毛片一区二区 | 青青国产揄拍视频| 久久国产精品偷任你爽任你| 日韩精品18禁一区二区| 免费国产99久久久香蕉| 日韩av一区二区高清不卡| 在线看国产精品自拍内射 | A级日本乱理伦片免费入口| 亚洲七七久久桃花影院| 亚洲AVAV天堂AV在线网阿V| 亚洲精品国产字幕久久不卡| 成人午夜在线观看日韩| 中文字幕一区二区三区乱码不卡|