9.3 結構體指針

2021-03-06 小歆軟體庫

(1)通過指向結構體變量的指針輸出結構體變量中的成員信息

#include<stdio.h>//指向結構體變量的指針

#include<string.h>

int main()

{

struct student//聲明結構體類型 struct student

{

long num;

char name[20];

char sex;

float score;

};

struct student stu;//定義struct student 類型的變量 stu

struct student *p;//定義 struct student 類型數據的指針變量 p

p=&stu;//p指向stu

stu.num=1001;//對結構體變量的成員賦值

strcpy(stu.name,"wei");//用字符串複製函數給stu.name賦值

stu.sex='m';

stu.score=95.5;

printf("no.:%ld\nname:%s\nsex:%c\nscore:%6.2f\n\n\n",stu.num,stu.name,stu.sex,stu.score);

//輸出結果

printf("no.:%ld\nname:%s\nsex:%c\nscore:%6.2f\n",(*p).num,(*p).name,(*p).sex,(*p).score);

}

(2)有三個學生的信息,放在結構體數組中,要求輸出學生的全部信息

#include<stdio.h>//指向結構體數組的指針

struct student//聲明結構體類型struct student

{

int num;

char name[20];

char sex;

int age;

};

struct student stu[3]={{1001,"xu",'m',20},{1002,"wei",'n',21},{1003,"chen",'m',21}};//定義結構體數組並初始化

int main()

{

        struct student *p;//定義指向struct student結構體變量的指針變量p

printf("no.  name     sex   age\n");

for(p=stu;p<stu+3;p++)

{

printf("%5d %-7s %2c %4d\n",p->num,p->name,p->sex,p->age);//輸出結果

}

}


(3)

#include<stdio.h>//有n個結構體變量,內含學生學號,姓名,和三門課程成績。要求輸出平均成績最高的學生的信息

#define N 3//學生數為3

struct student

{

    int num;//學號

    char name[20];//姓名

    float score[N];//成績

    float aver;//平均成績

};

int main()

{

        void input(struct student stu[]);//函數聲明

struct student max(struct student stu[]);

void print(struct student stu);

        struct student stu[N],*p=stu;//定義結構體數組和指針

input(p);//調用input函數

        print(max(p));//調用print函數,把max函數返回的值做print函數的實參

return 0;

}

void input(struct student stu[])//定義input函數

{

int i;

printf("請輸入各學生的信息:學號,姓名,三門成績:\n");

for(i=0;i<N;i++)

{

scanf("%d %s %f %f %f",&stu[i].num,&stu[i].name,&stu[i].score[0],

&stu[i].score[1],&stu[i].score[2]);//輸入數據

stu[i].aver=(stu[i].score[0]+stu[i].score[1]+stu[i].score[2])/3;

        }//求平均成績

}

struct student max(struct student stu[])//定義max函數

{ int i,m=0;//用m成績較高學生在數組中的序號

for(i=0;i<N;i++)

if(stu[i].aver>stu[m].aver) m=i;//找出平均成績最高的學生在數組中的序號

return stu[m];//返回成績最高學生信息的結構體元素

}

void print(struct student stud)

{ printf("\n成績最高的學生是:\n");

printf("學號:%d\n姓名:%s\n三門成績:%5.1f %5.1f %5.1f\n平均成績:%6.2f\n",stud.num,

stud.name,stud.score[0],stud.score[1],stud.score[2],stud.aver);}

/* max(p)的值(是結構體數組的元素)作為實參調用print函數。print函數的形參是 struct student類型的變量(而不是struct student 類型的數組)。在調用是進行虛實結合,把stu[m]的值(是結構體元素)傳遞給形參stud,而是結構體變量中的信息。在print函數中輸出結構體變量中個成員的值*/

相關焦點

  • 指向結構體的指針
    在C語言中幾乎可以創建指向任何類型的指針,包括用戶自定義的類型。創建結構體指針是極常見的。下面是一個例子:typedef struct{ char name[21]; char city[21]; char state[3];} Rec;typedef Rec *RecPointer;RecPointer r;r=(RecPointer)malloc(sizeof(Rec));r是一個指向結構體的指針。
  • c語言定義結構體指針
    u8 KeyDownState;//按下【down】鍵時轉向的索引號 void (*CurrentOperate)(); //當前狀態下執行的功能操作}KbdTabStruct;本文引用地址:http://www.eepw.com.cn/article/201611/322295.htmconst KbdTabStruct KBD[]={{0,1,2,3,4
  • 快速上手系列-C語言之結構體(二)結構體數組與結構體指針
    結構體數組對於結構體數組,我們先回想一下整型數組,然後舉例我們要統計咱們班30個人的姓名,學號 ,成績,如果我們用結構體變量來實現是不現實的。那麼我們就準備用結構體數組來完成這事。結構體數組就是同一類型的結構體變量的集合,內存分布上是連續的。
  • ...也可以面向對象面層,使用「函數指針結構體」為C語言找個「對象」
    函數指針結構體稍微思考一下,應該能夠想到C語言中的普通數據類型不僅可以用於定義數組,還可以用來定義結構體,例如:struct cn{char c;int i;double d;};那麼可以看作「普通數據類型」的函數指針也可以定義結構體嗎?
  • 指針、結構體、編譯預處理和文件
    指針的意思就是存儲數據在內存中的地址信息的變量,很饒口是不是,簡單翻譯一下,信息都是存儲在內存中以字節為單位的格子裡的,每個格子都有一個編號,比如1號格子,2號格子等等,這個編號就是數據的地址,比如我們設置一個變量是X,那這個X現在可能是7,經過運算之後可能變成67,如果設置的Y是X的指針,則Y的第一個值就是7在內存裡面的地址編號,比如1號格子就是1,當X變成67了,可能Y就是67在內存格子裡面的存儲地址
  • C語言程序中,有些函數的參數是結構體指針型,為什麼要這麼用?
    在C語言程序開發中,遇到複雜問題需要描述時,最常使用的就是結構體了。事實上,如果某個函數的參數比較多,並且這些參數被使用的頻率比較高,為了C語言代碼的簡潔,也常將這些參數封裝為結構體。修改後的C語言代碼明顯精簡多了修改後的C語言代碼明顯精簡多了,在函數內部,視頻的各個信息可以通過結構體指針 vinfo 訪問,例如:
  • C語言結構體(struct)詳解
    引用(C++)、指針和數組:首先是引用和指針:<div id="code_tiX">1. int main()  2. {  3.         struct stuff Huqinwei;  4.   5.
  • 指針指針
    例:#include<stdio.h>void changeA(int *a, int b){  b = 3;  a = &b;}void changeA1(int *a, int *b){  int c = 3;  *b = c;  *a = *
  • 「C語言指針」起別名關鍵字typedef和結構體類型的恩怨情仇
    在上一篇文章中,我們簡要了解了鍊表的前導知識——結構體和它的眾多小細節。其中提到了起別名關鍵字typedef,在那裡我們只是簡單介紹過:在實際工作中,程式設計師們普遍使用它,但是並未展開去講細節。所以本文決定沿襲上一篇文章的思路,結合一些程序實例,細緻地展開討論typedef和結構體相碰產生的奇妙反應。
  • 剖析c語言結構體的高級用法(二)
    這個就是我們接下來要討論的結構體對齊問題了。3、下面我們就來接著分析上面最後列印出結構體佔用內存大小為12個字節,卻不是9個字節大小的原因。首先我們要搞清楚好端端的結構體為啥要字節對齊呢?      (TYPE *)0 這是一個強制類型轉換,把0地址強制類型轉換成一個指針,  這個指針指向一個TYPE類型的結構體變量。(實際上這個結構體變量可能不存在,但是只要我們不去解引用這個指針就不會出錯)。
  • C語言中的結構體和聯合體
    如果成員本身又屬於一個結構體類型,則要用若干個成員運算符(點號 .),一級一級地找到最低一級的成員,例如:student1.birthday.month = 9;另外對結構體變量的成員可以像普通變量一樣進行各種運算,也可以用取址運算符 & 引用結構體變量成員的地址,或者引用結構體變量的地址。
  • C語言系列(九):結構體
    類型n 成員名n;};其中,struct是定義結構體類型的關鍵字;結構體類型名必須是合法的C標識符,與其前面的struct一起共同構成結構體類型名;花括號內的內容是結構體類型所包括的結構體成員,也稱為結構體分量。
  • C語言編程 — 結構體與位域
    ,也可以包含指向自己結構體類型的指針,這種指針的應用通常是為了實現一些更高級的數據結構如鍊表和樹等。這樣算來,stu1 其實佔用了 17 + 3 = 20 個字節。定義基類為結構體 Books 的指針類型變量:struct Books *struct_pointer;現在,就可以在上述定義的指針變量中存儲結構體變量的內存地址了
  • C語言的指針,簡介
    所以在java的JNI庫裡,如果需要把native層的C結構體的指針保存到java層,一般是定義一個long類型的變量。指針指向的變量,可以是普通變量、數組變量、結構體變量,以及數組元素、結構體的成員變量,還可以是指針變量。指針還可以指向函數,叫做函數指針。
  • C語言是C++的母語,萬變不離指針,指針是C語言的一大法寶!
    但C的結構體做不到。 在C++裡頭,父親的私有成員,兒子是無法訪問的。結構體嵌套也做不到。因為結構體根本就沒有訪問控制的概念。 對於C++而言,訪問控制實質上是在編譯層做的,我們仍舊可以通過指針來間接訪問。 例如:
  • 刻意練習—第九節《LInux c結構體&共用體&枚舉》
    >3.結構體的對齊訪問24.結構體的對齊訪問35.offsetof宏與container_of宏6.共用體union7.大小端模式18.大小端模式29.枚舉第二部分、章節介紹2.1.C語言之結構體概述 本節概述結構體,主要講了結構體和數組的差異
  • C 語言中的結構體和共用體(聯合體)
    ,一級一級地找到最低一級的成員,例如:student1.birthday.month = 9;另外對結構體變量的成員可以像普通變量一樣進行各種運算,也可以用取址運算符 & 引用結構體變量成員的地址,或者引用結構體變量的地址。
  • C語言中的結構體和共用體(聯合體)
    如果成員本身又屬於一個結構體類型,則要用若干個成員運算符(點號 .),一級一級地找到最低一級的成員,例如:student1.birthday.month = 9;另外對結構體變量的成員可以像普通變量一樣進行各種運算,也可以用取址運算符 & 引用結構體變量成員的地址,或者引用結構體變量的地址。
  • C語言結構體、枚舉以及位域的講解
    2.3、結構體變量初始化 與其他類型變量一樣,也可以給結構體的每個成員賦初值,這稱為結構體的初始化。結構體指針可以設定一個指針變量用來指向一個結構體變量。此時該指針變量的值是結構體變量的起始地址,該指針稱為結構體指針。 結構體指針與前面介紹的各種指針變量在特性和方法上是相同的。與前述相同,在程序中結構體指針也是通過訪問目標運算「*」訪問它的對象。
  • 結構體
    結構體概述在前面章節中介紹了 C 語言中的多種數據類型,例如:整型、字符型、浮點型、數組、指針……等等。但是在實際開發中,只有這些數據類型是不夠的,難以勝任複雜的程序設計。例如:在員工信息管理系統中,員工的信息就是一類複雜的數據。每條記錄中都包括員工的姓名、性別、年齡、工號、工資等信息。姓名為字符數組、性別為字符、年齡為整型、工號為整型、工資為整型。