#include
#include
#define number 5
#define name_len 64
void swap_int (
int*x,
int*y)
void
swap_str
(char
*sx,
char
*sy)
void
sort
(int num,
char str[
][name_len]
,int n)}}
}int
main
(void);
char name[
][name_len]=;
for(i =
0; i < number; i++
)sort
(height, name, number)
;puts
("\n按身高進行公升序排列。");
for(i =
0; i < number; i++
)return0;
}
使用結構體簡化**:
#include
#include
#define number 5
#define name_len 64
typedef
struct
student;
void swap_student (student *x, student *y)
void
sort_by_height
(student a,
int n)}}
}int
main
(void),
,,,,
};puts
("姓名 身高 體重 分數");
for(i =
0; i < number; i++
)sort_by_height
(std, number)
;puts
("\n按身高進行公升序排列。");
puts
("姓名 身高 體重 分數");
for(i =
0; i < number; i++
)return0;
}
結構體的命名空間
只要命名空間不同,就可以使用拼寫相同的識別符號(名字)。命名空間的分類有以下四種。
(標籤)名
小標籤 名
成員 名
一般性識別符號
int
main
(void
) x;
// 變數名
x:// 標籤名
x.x =1;
// 變數名.成員名
x.y =2;
// 變數名.成員名
return0;
}
注:
只要不屬於同乙個命名空間,即使在同一有效範圍內使用相同的名字,也不會產生任何問題。
typedef
struct
student;
上述結構體可以寫成如下形式:
struct student
;
該結構體形式的使用:
#include
#include
#define name_len 64
struct students
;int
main
(void
)
strcpy
(stu.name,
"vvcat");
// 直接賦值會報錯
如果寫成
stu.name =
"vvcat"
;//初始化錯誤
相當於
char str[5]
;str =
"vvcat"
;// 初始化錯誤
初始化也可以進行簡寫:
struct students stu;
strcpy
(stu.name,
"vvcat");
// 直接複製會報錯
stu.height =
175;
stu.weight =
62.5
; stu.score =
88;
簡寫方式:
struct students stu =
;
這樣一行就完成了多行的**賦值操作,使**更加簡潔。
如果不對結構體進行初始化:
#include
#include
#define name_len 64
struct students
;int
main
(void);
printf
("姓名 = %s\n"
, stu.name)
;printf
("身高 = %d\n"
, stu.height)
;printf
("體重 = %.1f\n"
, stu.weight)
;printf
("分數= %ld\n"
, stu.score)
;return0;
}
注:
結構體物件 o 中的成員 m 可以通過o.m來訪問。
宣告結構體時所賦的初始值的形式是,將各個結構體成員的初始值依次排列在{}裡面,並用逗號分割。未賦初始值的成員被初始化為0。
結構體成員和 -> 運算子
#include
#define name_len 64
struct student
;void
update_height_weight
(struct student *std)if(
(*std)
.weight >80)
}void
update_score
(struct student *std)
}int
main
(void);
update_height_weight
(&stu)
;update_score
(&stu)
;printf
("姓名 = %s\n"
, stu.name)
;printf
("身高 = %d\n"
, stu.height)
;printf
("體重 = %.1f\n"
, stu.weight)
;printf
("分數 = %ld\n"
, stu.score)
;return0;
}
在函式中,身高和體重可以通過以下表示式來訪問。
(
*std)
.height
(*std)
.weight
也可以通過 -> 運算子進行訪問
std -> height
std -> weight
在指標變數前加上指標運算子*,就表示該指標指向的物件實體。通過(*std).height 或 std -> height 等表示式可以表示std 指向的物件的成員。
注:
返回結構體的函式
#include
struct xyz
;struct xyz xyz_of
(int x,
long y ,
double z)
intmain
(void);
// 結構體初始化
s =xyz_of
(123
,123456
,12.34);
// 為結構體賦值
printf
("xyz.x = %d\n"
, s.x)
;printf
("xyz.y = %ld\n"
, s.y)
;printf
("xyz.z = %f\n"
, s.z)
;return0;
}
陣列和結構體在處理多個物件的集合方面具有諸多相同點,他們統稱為聚合型別。
int a[5]
, b[5]
;a = b;
// 賦值錯誤
struct student x, y;
x = y;
// 賦值成功
C語言的結構體使用
1 基本的建立結構體和使用 include include includestruct man void main struct man man1 man1.age 30 man1.name jam printf d,s n man.age,man.name printf d,s n man1.ag...
c語言 結構體的使用
結構體的定義形式為 struct 結構體名 結構體是一種集合,它裡面包含了多個變數或陣列,它們的型別可以相同,也可以不同,每個這樣的變數或陣列都稱為結構體的成員 member 請看下面的乙個例子 struct stu stu 為結構體名,它包含了 5 個成員,分別是 name num age gro...
C語言結構體與結構體指標的使用
c語言結構體 struct 是由一系列具有相同型別或不同型別的資料構成的資料集合。說的通俗一點就是乙個集合。c語言是一門面向過程的程式語言,而結構體的使用在某些層次上跟物件導向有點異曲同工之處了。下面回歸正題,學習一下結構體以及結構體指標的知識。一 結構體變數的定義和初始化 1 首先我們來看一下結構...