程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> C語言學習014:結構化數據類型,語言學習014

C語言學習014:結構化數據類型,語言學習014

編輯:關於C語言

C語言學習014:結構化數據類型,語言學習014


struct的基本使用

 1 #include <stdio.h>
 2 
 3 //定義數據結構
 4 struct fish{
 5     const char *name;
 6     const char *species;
 7     int teeth;
 8     int age;
 9 };
10 
11 void catalog(struct fish f){
12     printf("%s is a %s with %i teeth. He is %i\n",f.name,f.species,f.teeth,f.age);//訪問結構的字段
13 }
14 
15 int main(){
16     //聲明結構變量
17     struct fish snappy={"Snappy","Piranha",69,4};
18     catalog(snappy);
19     return 0;
20 }

  將結構變量賦值給另一個結構變量時,計算機會創建一個全新的結構副本,然後將每個字段都復制過去;如果結構中有指針,那麼復制的僅僅是指針的值

    struct fish snappy={"Snappy","Piranha",69,4};
    struct fish gnasher=snappy;

  結構還可以嵌套使用

 1 #include <stdio.h>
 2 
 3 struct preferences{
 4     const char *food;
 5     float exercise_hours;
 6 };
 7 
 8 struct fish{
 9     const char *name;
10     const char *species;
11     int teeth;
12     int age;
13     struct preferences care;//嵌套在fish中的結構體preferences
14 };
15 
16 void catalog(struct fish f){
17     printf("%s is a %s with %i teeth. He is %i\n",f.name,f.species,f.teeth,f.age);//訪問結構的字段
18     //訪問結構體中的結構體
19     printf("%s like to eat %s\n",f.name,f.care.food);
20     printf("%s like to exercise %f hours\n",f.name,f.care.exercise_hours);
21 }
22 
23 int main(){
24     struct fish snappy={"Snappy","Piranha",69,4,{"Meat",7.5}};
25     catalog(snappy);
26     return 0;
27 }

更簡單的創建結構變量

  通過使用typedef為結構命名,這樣在創建結構變量的時候可以省去struct關鍵字

#include <stdio.h>

typedef struct cell_phone{
    int cell_no;
    const char *wallpapaer;
} phone;//phone為類型名(cell_phone的別名)

int main(){
     phone p={5555,"sinatra.png"};
     printf("number %i\n",p.cell_no);
    return 0;
}

  我們還可以直接省去結構的名字定義結構,這也就是所謂的匿名結構

1 typedef struct {
2     int cell_no;
3     const char *wallpapaer;
4 } phone;

 傳遞結構指針

  當將一個結構賦值給另一個結構,我們知道是創建一個新的副本;如果我們希望通過被賦值的結構更新原來的結構,就需要用到結構指針

 1 #include <stdio.h>
 2 
 3 typedef struct {
 4     int cell_no;
 5     const char *wallpapaer;
 6 } phone;
 7 
 8 int main(){
 9      phone p={5555,"sinatra.png"};
10      phone p2=p;
11      p2.cell_no=4444;
12      printf("p.cell_no:%i p2.cell_no:%i\n",p.cell_no,p2.cell_no);
13      phone* p3=&p;//將結構p的地址賦值給*p3
14      (*p3).cell_no=6666;
15      printf("p.cell_no:%i p2.cell_no:%i p3.cell_no:%i\n",p.cell_no,p2.cell_no,(*p3).cell_no);
16     return 0;
17 }

  因為我們常常會把(*p2).wallpapaer錯誤的寫成*p2.wallpapaer,它們並不等價,所以C語言開發者設計了更簡單的表示結構指針的方法

1 int main(){
2      phone p={5555,"sinatra.png"};
3      phone* p2=&p;
4      printf("p2->wallpapaer:%s = (*p2).wallpapaer:%s\n",p2->wallpapaer,(*p2).wallpapaer);//
5     return 0;
6 }

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved