原文鏈接:http://www.orlion.ga/758/
struct point {
double x, y;
};
這樣定義了point這個標識符,既然是標識符,那麼它的命名規則就和變量一樣,但是不表示一個變量而是表示一個類型,這種標識符在C語言中成為Tag,整個struct point {double x , y;} 可以看做是一個類型名,就像int或者是double一樣,只不過這是個復合類型,如果用這個類型名來定義變量,可以寫:
struct point {
double x , y;
} p1 , p2;
這樣p1和p2就是變量名,變量定義後邊要加上“;”,另外結構體定義(如第一段代碼)後邊";"不能省略。
不管用那種方式來定義point這個Tag,以後都可以直接使用struct point來替代類型名了,例如可以這樣再重新定義兩個變量:
struct point p3 , p4;
如果在定義結構體類型的時候同時定義了變量,也可以不必寫Tag,例如:
struct {
double x , y;
} p1 , p2;
結構體變量可以用"."運算符來訪問其中的成員:
#include <stdio.h>
int main(void)
{
struct point{
double x , y;
} p;
double x = 1.0;
p.x = x;
z.y = 2.0;
struct point p2;
printf("z的橫坐標是:%f,縱坐標是%f\n" , z.x , z.y);
return 0;
}
結構體也可以在定義時初始化,如:
struct point p = {1.0 , 2.0};
如果括號中的數據比結構體的成員少,未指定的成員用0來初始化,就像未初始化的全局變量一樣。結構體賦值與基本數據類型有些不同,需要注意一下是錯誤的:
struct point p;
p = {1.0 , 2.0};
但是struct point p1 = {1.0 , 2.0}; struct point p2 = p1;p1 = p2;這樣可以。