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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

谭浩强C-结构体

發布時間:2025/3/17 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 谭浩强C-结构体 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、結構體的定義

1、定義形式

struct 結構名

{成員列表;};?????? //定義為語句,分號不能丟

2、結構類型變量的聲明

(1)聲明形式1

struct student

{ int number;

?? char name[10];

?? float score;

};

struct student st1,st2,st3;

(2)聲明形式2

struct student

{ int number;

?? char name[10];

?? float score;

}st1,st2,st3;

(3)結構體變量的賦值

如上例:

struct student

{ int number;

?? char name[10];

?? float score;

}st1={101,"wang",87.5};

3、結構數組的定義

struct student

{ int number;

?? char name[10];

?? float score;

}stu[50]={

?? {101,"wang",87.5},

?? {102,"li",90},

?? ...

??? };?? //定義并初始化50個數組元素,每個元素均具有結構體student的結構。

二、結構指針

1、聲明形式

struct 結構名 *指針變量名????? //方法一:須在聲明結構指針變量前應已說明該結構體

struct 結構名

{結構體

}*指針變量名;??? //方法二:與結構體變量一樣

2、結構指針的賦值

struct student{

...

};

struct student *p;

struct student st1={..};

p=&st1;? //取該結構體變量的首地址

3、通過結構指針變量訪問結構變量成員

若st1為上述student結構體變量,p為該結構體指針變量:

使p=&st1;則可用下列方法訪問st1各成員:

p->num、p->name、p->score。

或(*p).num、(*p).name ...

與st1直接引用:st1.num都可以用來表示st1的成員。

4、指向結構數組的指針

struct student

{ int num;

? char name[10];

}stu[10]={...};??????????????? //聲明并初始化結構數組stu

struct student *p;??????????? //聲明結構指針p

p=stu;??????? //對p賦值,指向數組stu首地址

for(;p<stu+10;p++)?????????? //stu+10表示第10個數組元素的首地址,p++表示指向下一個? 數組元素

?printf("%d,%s",p->num,p->name[10]);? //通過指針變量引用結構數組元素的成員

三、動態存儲分配

1、malloc函數

在內存動態存儲區里分配一塊長度為N字節的連續區域,返回值為該內存區首地址,類型說明符表示該內存區存貯的數據類型,(類型說明符*)表示將該返回值指針強制轉換成該類型指針:

(類型說明符*)malloc(N)

如:

(int*)malloc(100);???

(struct student*)malloc(sizeof(struct student));

2、calloc函數

(類型說明符*)calloc(n,N) //動態存儲區內分配n個長度為N字節的連續區域,返回值為該區首地址,(類型說明符*)表示將該返回值指針強制轉換成該類型指針;

3、free函數

free(void*ptr);? //釋放指針變量ptr指向的一塊內存空間,使用free函數前:ptr指向的必須是事先通過malloc或calloc分配的區域。

四、鏈表

如何分配空間來存儲學生的數據?可想到使用結構體數組,但如何確定學生的數量?新增或刪減學生如何處理?引申出鏈表描述:

鏈表各元素首先均是一個結構體,各個元素稱為結點,各結點對應結構體內有一成員為指針變量,指向該結點下一個結點的首地址,第0個結點稱為頭結點,僅存有指針變量,指向第1個結點;最后一個結點的指針變量成員指向為空(NULL)。

例:建立一個學生數據的鏈表結構

struct student{char *name;struct student *pnext; //指向下一個結點的指針變量,下一結點數據類型為結構體 }; //完成鏈表結構聲明int i;struct student *head,*p1,*pass;for(i=0;i<N;i++){p1=(struct student*)malloc(sizeof(struct student));//分配一塊結點空間if(i==0) {head=p1;pass=p1;} //頭結點初始化else {pass->next=p1;pass=p1;} //用pass暫存當前地址,作為中間量傳遞 printf("input name:\n");scanf("%s",p1->name); //鏈接結點內容輸入 p1->next=Null; //每次循環當前分配區為最后一個結點,使其指針指向空 }return head; //返回鏈表頭結點

?

?

轉載于:https://www.cnblogs.com/tsembrace/archive/2013/06/09/3129363.html

總結

以上是生活随笔為你收集整理的谭浩强C-结构体的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。