標籤:
結構體定義三種方式:
1 #include<stdio.h> 2 //第一種定義方法 3 struct point { 4 int x; 5 int y; 6 }; 7 struct point p1,p2; 8 9 //第二種定義方法 10 struct { 11 int x; 12 int y; 13 } p1,p2; 14 15 //第三種定義方法 16 struct { 17 int x; 18 int y; 19 } p1,p2;
這三種方法,對於第一和第三種,都聲明了結構point。但是第二種沒有,只聲明了兩個變數。
下面的小例子,說明結構類型的兩種初始化方法。
1 #include<stdio.h> 2 struct date { 3 int month; 4 int day; 5 int year; 6 }; 7 int main() 8 { 9 struct date today = {2,18,2015}; //結構的初始化,方法1;同數組初始化。 10 struct date thismonth = {.month = 3,.year = 2015}; //結構的初始化,方法2;指定對應的結構成員初始化。 11 printf("Todays date is %i-%i-%i\n",today.day,today.month,today.year) 12 printf("This month date is %i-%i-%i\n",thismonth.month = 2,thismonth.year = 2015} 13 return 0; 14 };
結構成員:
結構和數組有點像,存取方法不同。數組是【】訪問裡面的元素;結構是用.來訪問結構成員。
結構運算:
要訪問整個結構,可以直接存取結構變數的名字。
對於整個結構可以賦值,取地址,可以傳遞給函數。
p1 = struct point{5,10}; //相當於p1.x = 5,p1.y = 10
p1 = p2;
結構指標:
結構和數組不一樣,數組是指標,可以直接取地址。對結構成員取地址,必須用&。
struct date *pdate = &today;
結構作為參數函數:
int numofdays(struct date d);
整個結構可以作為參數的值傳入函數。
這個時候是在函數內部建立一個結構變數,並且賦值調用者結構的值。
也可以返回一個結構。和數組不同。
輸入結構:
scanf函數只能讀入一個變數。怎麼讀入一個結構呢?
可以調用一個函數來實現。注意:C語言的函數調用是傳值的。
所以在函數中的結構變數p和main函數中的結構變數p是不同的。
在函數讀入p之後沒有任何值返回給main,所以主函數結構值不變。
解決方案:
在函數內部建立一個臨時的結構變數p,返回一個結構變數。
指向結構的指標:
1 #include<stdio.h> 2 struct date { 3 int month; 4 int day; 5 int year; 6 } myday; 7 8 struct date *p = &myday; 9 10 (*p).month = 12; 11 p->month = 12;
用->表示指標所指結構變數中成員。
C語言學習--結構體