原文鏈接: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;這樣可以。