亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C > 正文

C語言 結構體和指針詳解及簡單示例

2020-01-26 14:27:22
字體:
來源:轉載
供稿:網友

指針也可以指向一個結構體,定義的形式一般為:

struct 結構體名 *變量名;

下面是一個定義結構體指針的實例:

struct stu{ char *name; //姓名 int num; //學號 int age; //年齡 char group; //所在小組 float score; //成績} stu1 = { "Tom", 12, 18, 'A', 136.5 };//結構體指針
struct stu *pstu = &stu1;

也可以在定義結構體的同時定義結構體指針:

struct stu{ char *name; //姓名 int num; //學號 int age; //年齡 char group; //所在小組 float score; //成績} stu1 = { "Tom", 12, 18, 'A', 136.5 }, *pstu = &stu1;

注意,結構體變量名和數組名不同,數組名在表達式中會被轉換為數組指針,而結構體變量名不會,無論在任何表達式中它表示的都是整個集合本身,要想取得結構體變量的地址,必須在前面加&,所以給 pstu 賦值只能寫作:

struct stu *pstu = &stu1;

而不能寫作:

struct stu *pstu = stu1;

還應該注意,結構體和結構體變量是兩個不同的概念:結構體是一種數據類型,是一種創建變量的模板,編譯器不會為它分配內存空間,就像 int、float、char 這些關鍵字本身不占用內存一樣;結構體變量才包含實實在在的數據,才需要內存來存儲。下面的寫法是錯誤的,不可能去取一個結構體名的地址,也不能將它賦值給其他變量:

struct stu *pstu = &stu;
struct stu *pstu = stu;

獲取結構體成員

通過結構體指針可以獲取結構體成員,一般形式為:

(*pointer).memberName

或者:

pointer->memberName

第一種寫法中,.的優先級高于*,(*pointer)兩邊的括號不能少。如果去掉括號寫作*pointer.memberName,那么就等效于*(pointer.numberName),這樣意義就完全不對了。

第二種寫法中,->是一個新的運算符,習慣稱它為“箭頭”,有了它,可以通過結構體指針直接取得結構體成員;這也是->在C語言中的唯一用途。

上面的兩種寫法是等效的,我們通常采用后面的寫法,這樣更加直觀。

【示例】結構體指針的使用。

#include <stdio.h>int main(){ struct{ char *name; //姓名 int num; //學號 int age; //年齡 char group; //所在小組 float score; //成績 } stu1 = { "Tom", 12, 18, 'A', 136.5 }, *pstu = &stu1;    //讀取結構體成員的值
    printf("%s的學號是%d,年齡是%d,在%c組,今年的成績是%.1f!/n", (*pstu).name, (*pstu).num, (*pstu).age, (*pstu).group, (*pstu).score);
    printf("%s的學號是%d,年齡是%d,在%c組,今年的成績是%.1f!/n", pstu->name, pstu->num, pstu->age, pstu->group, pstu->score);
    return 0;
}

運行結果:

Tom的學號是12,年齡是18,在A組,今年的成績是136.5!
Tom的學號是12,年齡是18,在A組,今年的成績是136.5!

【示例】結構體數組指針的使用。

#include <stdio.h>struct stu{ char *name; //姓名 int num; //學號 int age; //年齡 char group; //所在小組 float score; //成績}stus[] = { {"Zhou ping", 5, 18, 'C', 145.0}, {"Zhang ping", 4, 19, 'A', 130.5}, {"Liu fang", 1, 18, 'A', 148.5}, {"Cheng ling", 2, 17, 'F', 139.0}, {"Wang ming", 3, 17, 'B', 144.5}}, *ps;int main(){ //求數組長度 int len = sizeof(stus) / sizeof(struct stu); printf("Name/t/tNum/tAge/tGroup/tScore/t/n"); for(ps=stus; ps<stus+len; ps++){ printf("%s/t%d/t%d/t%c/t%.1f/n", ps->name, ps->num, ps->age, ps->group, ps->score); } return 0;}

運行結果:

Name            Num     Age     Group   Score
Zhou ping       5       18      C       145.0
Zhang ping      4       19      A       130.5
Liu fang        1       18      A       148.5
Cheng ling      2       17      F       139.0
Wang ming       3       17      B       144.5

結構體指針作為函數參數

結構體變量名代表的是整個集合本身,作為函數參數時傳遞的整個集合,也就是所有成員,而不是像數組一樣被編譯器轉換成一個指針。如果結構體成員較多,尤其是成員為數組時,傳送的時間和空間開銷會很大,影響程序的運行效率。所以最好的辦法就是使用結構體指針,這時由實參傳向形參的只是一個地址,非??焖佟?/p>

【示例】計算全班學生的總成績、平均成績和以及 140 分以下的人數。

#include <stdio.h>struct stu{ char *name; //姓名 int num; //學號 int age; //年齡 char group; //所在小組 float score; //成績}stus[] = { {"Li ping", 5, 18, 'C', 145.0}, {"Zhang ping", 4, 19, 'A', 130.5}, {"He fang", 1, 18, 'A', 148.5}, {"Cheng ling", 2, 17, 'F', 139.0}, {"Wang ming", 3, 17, 'B', 144.5}};void average(struct stu *ps, int len);int main(){ int len = sizeof(stus) / sizeof(struct stu); average(stus, len); return 0;}void average(struct stu *ps, int len){ int i, num_140 = 0; float average, sum = 0; for(i=0; i<len; i++){ sum += (ps + i) -> score; if((ps + i)->score < 140) num_140++; } printf("sum=%.2f/naverage=%.2f/nnum_140=%d/n", sum, sum/5, num_140);}

運行結果:

sum=707.50
average=141.50
num_140=2

以上就是對結構體和指針的資料整理,后續繼續補充相關資料,謝謝大家對本站的支持!

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美与欧洲交xxxx免费观看| 欧美电影在线观看网站| 热久久视久久精品18亚洲精品| 热草久综合在线| 国产亚洲精品久久久久久| 国产精品久久久久久一区二区| 亚洲一区免费网站| 精品中文字幕在线观看| 亚洲国产精彩中文乱码av在线播放| 日本精品在线视频| 欧美黄色www| 亚洲自拍偷拍色片视频| 亚洲精品久久久久国产| 伊人亚洲福利一区二区三区| 亚洲欧美成人精品| 久久久精品亚洲| 亚洲成色777777女色窝| 国产小视频91| 亚洲成人av在线播放| 欧美日韩国产123| 美女啪啪无遮挡免费久久网站| 亚州精品天堂中文字幕| 亚洲综合在线小说| 性视频1819p久久| 在线观看国产欧美| 日韩电影免费在线观看中文字幕| 日本精品免费一区二区三区| 91美女片黄在线观看游戏| 中文字幕久精品免费视频| 91在线精品视频| 亚洲精品国产美女| 欧日韩在线观看| 91久久精品久久国产性色也91| 97视频在线观看亚洲| 成人黄色影片在线| 一区二区三区视频免费在线观看| 欧美性猛交xxxx乱大交蜜桃| 精品亚洲va在线va天堂资源站| 国产视频999| 亚洲视频一区二区三区| 国产精品91免费在线| 久久激情五月丁香伊人| 亚洲综合日韩中文字幕v在线| 亚洲三级黄色在线观看| 最近2019年中文视频免费在线观看| 久久久久久高潮国产精品视| 深夜福利91大全| 日韩有码视频在线| 亚洲一区美女视频在线观看免费| 欧美精品www在线观看| 亚洲欧美中文另类| 日韩暖暖在线视频| 久久久久久久久国产精品| 国产ts人妖一区二区三区| 亚洲成人精品久久| 国产精品入口免费视| 国产综合在线视频| 亚洲人成电影在线| 成人黄色av免费在线观看| 欧美日韩亚洲高清| 亚洲精品欧美一区二区三区| 亚洲成人黄色网| 亚洲综合在线做性| 久久久亚洲影院| 亚洲aa在线观看| 国产91在线播放九色快色| 国产精品视频99| 亚洲福利视频在线| 国产在线观看精品一区二区三区| 亚洲一区二区久久| 亚洲欧美日韩在线高清直播| 色午夜这里只有精品| 欧美日韩激情视频| 一区二区三区视频免费在线观看| 国产一区二区日韩| 亚洲精品网站在线播放gif| 欧美性理论片在线观看片免费| 国产精品久久久久影院日本| 91久久久久久久一区二区| 欧美做爰性生交视频| 91精品视频播放| 91欧美日韩一区| 欧美—级高清免费播放| 久久精品国产清自在天天线| 亚洲国产精品中文| 国产区精品在线观看| 亚洲xxxxx性| 亚洲激情国产精品| 这里精品视频免费| 日韩中文字幕第一页| 国产视频久久网| 538国产精品视频一区二区| 热re99久久精品国产66热| 国产精品视频永久免费播放| 九九九久久国产免费| 欧美精品一区二区免费| 久久99视频免费| 日韩中文字幕网站| 中文字幕精品网| 97视频免费看| 成人午夜两性视频| 精品国产欧美成人夜夜嗨| 亚洲免费中文字幕| 久久激情视频免费观看| 亚洲图片欧洲图片av| 国产精品丝袜白浆摸在线| 亚洲国产精品久久久| 蜜臀久久99精品久久久久久宅男| 黑人巨大精品欧美一区免费视频| 91豆花精品一区| 国产亚洲精品日韩| 国产精品激情av电影在线观看| 98精品在线视频| 国产+成+人+亚洲欧洲| 国产成人久久久精品一区| 亚洲视频网站在线观看| 亚洲视频999| 精品国产欧美成人夜夜嗨| 欧美日韩亚洲视频| 欧美另类极品videosbest最新版本| 91精品国产综合久久久久久久久| 成人xxxxx| 国产午夜精品视频免费不卡69堂| 成人高清视频观看www| 精品调教chinesegay| 亚洲精品自拍偷拍| 成人av.网址在线网站| 91夜夜未满十八勿入爽爽影院| 国产精欧美一区二区三区| 日韩av电影在线免费播放| 在线中文字幕日韩| 国产欧美日韩亚洲精品| 欧美国产日韩中文字幕在线| 久久男人的天堂| 亚洲国产天堂久久国产91| 日韩亚洲精品视频| 69视频在线免费观看| 少妇激情综合网| 日韩免费在线视频| 国产成人综合精品在线| 91影院在线免费观看视频| 国产精品福利网站| 国产偷亚洲偷欧美偷精品| 亚洲性av在线| 国产精品丝袜视频| 亚洲免费视频在线观看| 欧美国产在线电影| 中文字幕亚洲综合久久| 亚洲国产天堂网精品网站| 91精品综合久久久久久五月天| 美日韩在线视频| 亚洲欧美国产日韩天堂区| 久久久国产视频| 亚洲最大福利视频| 国产精品一二区| 日韩av影片在线观看| 日本一区二区三区在线播放| 亚洲国产成人精品女人久久久| 色悠悠国产精品| 欧美国产亚洲精品久久久8v| 精品偷拍各种wc美女嘘嘘| 精品色蜜蜜精品视频在线观看| 黑人巨大精品欧美一区免费视频| 91在线看www|