最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C語言 結(jié)構(gòu)體和指針詳解及簡(jiǎn)單示例

 更新時(shí)間:2016年08月24日 09:52:08   投稿:lqh  
本文主要介紹C語言 結(jié)構(gòu)體和指針,這里整理了相關(guān)資料,并附示例代碼和實(shí)現(xiàn)結(jié)果,以便大家學(xué)習(xí)參考,希望能幫助學(xué)習(xí)C語言的朋友

指針也可以指向一個(gè)結(jié)構(gòu)體,定義的形式一般為:

struct 結(jié)構(gòu)體名 *變量名;

下面是一個(gè)定義結(jié)構(gòu)體指針的實(shí)例:

struct stu{
 char *name; //姓名
 int num; //學(xué)號(hào)
 int age; //年齡
 char group; //所在小組
 float score; //成績(jī)
} stu1 = { "Tom", 12, 18, 'A', 136.5 };
//結(jié)構(gòu)體指針
struct stu *pstu = &stu1;

也可以在定義結(jié)構(gòu)體的同時(shí)定義結(jié)構(gòu)體指針:

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

注意,結(jié)構(gòu)體變量名和數(shù)組名不同,數(shù)組名在表達(dá)式中會(huì)被轉(zhuǎn)換為數(shù)組指針,而結(jié)構(gòu)體變量名不會(huì),無論在任何表達(dá)式中它表示的都是整個(gè)集合本身,要想取得結(jié)構(gòu)體變量的地址,必須在前面加&,所以給 pstu 賦值只能寫作:

struct stu *pstu = &stu1;

而不能寫作:

struct stu *pstu = stu1;

還應(yīng)該注意,結(jié)構(gòu)體和結(jié)構(gòu)體變量是兩個(gè)不同的概念:結(jié)構(gòu)體是一種數(shù)據(jù)類型,是一種創(chuàng)建變量的模板,編譯器不會(huì)為它分配內(nèi)存空間,就像 int、float、char 這些關(guān)鍵字本身不占用內(nèi)存一樣;結(jié)構(gòu)體變量才包含實(shí)實(shí)在在的數(shù)據(jù),才需要內(nèi)存來存儲(chǔ)。下面的寫法是錯(cuò)誤的,不可能去取一個(gè)結(jié)構(gòu)體名的地址,也不能將它賦值給其他變量:

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

獲取結(jié)構(gòu)體成員

通過結(jié)構(gòu)體指針可以獲取結(jié)構(gòu)體成員,一般形式為:

(*pointer).memberName

或者:

pointer->memberName

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

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

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

【示例】結(jié)構(gòu)體指針的使用。

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

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

Tom的學(xué)號(hào)是12,年齡是18,在A組,今年的成績(jī)是136.5!
Tom的學(xué)號(hào)是12,年齡是18,在A組,今年的成績(jī)是136.5!

【示例】結(jié)構(gòu)體數(shù)組指針的使用。

#include <stdio.h>
struct stu{
 char *name; //姓名
 int num; //學(xué)號(hào)
 int age; //年齡
 char group; //所在小組
 float score; //成績(jī)
}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(){
 //求數(shù)組長(zhǎng)度
 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;
}

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

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

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

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

【示例】計(jì)算全班學(xué)生的總成績(jī)、平均成績(jī)和以及 140 分以下的人數(shù)。

#include <stdio.h>
struct stu{
 char *name; //姓名
 int num; //學(xué)號(hào)
 int age; //年齡
 char group; //所在小組
 float score; //成績(jī)
}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);
}

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

sum=707.50
average=141.50
num_140=2

以上就是對(duì)結(jié)構(gòu)體和指針的資料整理,后續(xù)繼續(xù)補(bǔ)充相關(guān)資料,謝謝大家對(duì)本站的支持!

相關(guān)文章

  • c++ vector對(duì)象相關(guān)總結(jié)

    c++ vector對(duì)象相關(guān)總結(jié)

    這篇文章主要介紹了c++ vector對(duì)象的相關(guān)資料,幫助大家更好的理解和學(xué)習(xí)使用c++,感興趣的朋友可以了解下
    2021-02-02
  • C++獲取類的成員函數(shù)的函數(shù)指針詳解及實(shí)例代碼

    C++獲取類的成員函數(shù)的函數(shù)指針詳解及實(shí)例代碼

    這篇文章主要介紹了C++獲取類的成員函數(shù)的函數(shù)指針詳解及實(shí)例代碼的相關(guān)資料,需要的朋友可以參考下
    2017-02-02
  • OpenCV 輪廓周圍繪制矩形框和圓形框的方法

    OpenCV 輪廓周圍繪制矩形框和圓形框的方法

    這篇文章主要介紹了OpenCV 輪廓周圍繪制矩形框和圓形框,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-01-01
  • 淺析C++11新特性的Lambda表達(dá)式

    淺析C++11新特性的Lambda表達(dá)式

    C++11 新增了很多特性,lambda 表達(dá)式是其中之一,本文涉及到C++11這次更新中較為重要的lambda表達(dá)式。有需要的朋友們可以參考學(xué)習(xí)。
    2016-08-08
  • 基于C++ map中key使用指針問題的詳解

    基于C++ map中key使用指針問題的詳解

    本篇文章是對(duì)C++ map中key使用指針的問題進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-05-05
  • C++定時(shí)器實(shí)現(xiàn)和時(shí)間輪介紹

    C++定時(shí)器實(shí)現(xiàn)和時(shí)間輪介紹

    這篇文章主要介紹了C++定時(shí)器實(shí)現(xiàn)和時(shí)間輪介紹,定時(shí)器可以由很多種數(shù)據(jù)結(jié)構(gòu)實(shí)現(xiàn),比如最小堆、紅黑樹、跳表、甚至數(shù)組都可以,其本質(zhì)都是拿到最小時(shí)間的任務(wù),然后取出該任務(wù)并執(zhí)行,更多相關(guān)內(nèi)容介紹,需要的小伙伴可以參考一下
    2022-09-09
  • 一篇文章帶你入門C語言:函數(shù)

    一篇文章帶你入門C語言:函數(shù)

    這篇文章主要介紹了C語言中函數(shù)的聲明、定義及使用的入門教程,重點(diǎn)講述了main函數(shù)的相關(guān)知識(shí),需要的朋友可以參考下,希望能給你帶來幫助
    2021-08-08
  • 淺談C++ 虛函數(shù)分析

    淺談C++ 虛函數(shù)分析

    這篇文章主要介紹了淺談C++ 虛函數(shù)分析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-02-02
  • C++中DeviceIoCteatol的用法實(shí)例

    C++中DeviceIoCteatol的用法實(shí)例

    這篇文章主要介紹了C++中DeviceIoCteatol的用法實(shí)例,對(duì)于學(xué)習(xí)C++針對(duì)硬件的操作有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2014-10-10
  • 淺析C++中前置聲明的應(yīng)用與陷阱

    淺析C++中前置聲明的應(yīng)用與陷阱

    以下是對(duì)C++中前置聲明的應(yīng)用與陷阱進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-07-07

最新評(píng)論

平定县| 屯留县| 武义县| 永城市| 游戏| 永济市| 和平县| 八宿县| 博客| 鄂托克旗| 西峡县| 基隆市| 牟定县| 灌云县| 南宫市| 台中县| 卢龙县| 什邡市| 龙海市| 四平市| 东宁县| 印江| 芷江| 施甸县| 诸暨市| 太谷县| 兴义市| 安岳县| 筠连县| 南召县| 沽源县| 镇坪县| 丹棱县| 扎鲁特旗| 秦安县| 文山县| 思南县| 珠海市| 鹿泉市| 长寿区| 凭祥市|