結構體_3

結構體變量和普通的變量相同——在函數內部聲明的結構體只能在該函數內部使用,所以通常結構體都是在函數外部聲明,這樣結構體就可以在多個函數中使用,一般都聲明在main函數上邊

結構體變量與函數

對於結構體變量,其賦值也可以使用強制類型轉換,如下面的例子

1

# include <stdio.h>

struct Student
{
	int age;
	float score;
	char sex;
};

int main(void)
{
	struct Student st;
	st = (struct Student){21, 97.5, 'M'}; 

	printf("%d %f %c\n", st.age, st.score, st.sex);     

	return 0;
}

這樣的賦值也是可以的,另外再強調一下結構體變量是可以相互賦值的,這點在《結構體_1》中說過了


結構體可以通過結構體變量以參數形式傳遞到函數中,也可以作爲函數的返回值,當然,與普通變量相同,傳進函數的知識結構體變量的值,而不是結構體變量,如果想利用函數對結構體變量進行某種操作,可以使用指針,也可以返回一個結構體變量的值

要知道,不能用scanf直接輸入一個結構的內容,但可以通過函數給結構體賦值,這就需要讓函數的返回值爲結構變量,因爲C語言的函數是傳值的,只傳值是不會改變函數外部變量的值的

2

# include <stdio.h>

struct Student {
	int x;
	int y;
};

struct Student print() {
	struct Student t;
	scanf("%d", &t.x);
	scanf("%d", &t.y);
	
	return t;
}

int main(void) {
	struct Student st1;
	st1 = print();
	printf("st1.x = %d, st1.y = %d\n", st1.x, st1.y);
	
	return 0;
} 

示例輸出結果爲:

這個程序是結構體作爲函數返回值,第814行是定義了一個返回類型爲struct Student 的函數

結構體數組

既然可以定義結構體變量,自然也可以定義結構體數組,還可以定義結構體中的結構體

3

# include <stdio.h>

struct Time {
	int year;
	int month;
	int day;
};

//輸出結構體的值
void output(struct Time t) {
	printf("year = %d\n", t.year);
	printf("month = %d\n", t.month);
	printf("day = %d\n", t.day);
	printf("\n");
} 

int main(void) {
	int i, t;
	struct Time tarr[3] = {{1949, 10, 1}, {1963, 8, 1}, {2008, 8, 8}};
  	t = sizeof(tarr) /sizeof(tarr[0]);
    for (i=0; i<t; i++) {
    	output(tarr[i]);
    }
    
	return 0;
}

輸出結果爲:


在這個程序,結構體變量在函數output()中做了參數

另外,第20行代碼表示得到該結構體數組的元素個數


再舉一個輸入結構體數組成員的例子

4

# include <stdio.h>

const int I = 3;

struct Time {
	int year;
	int month;
	int day;
};

//輸出結構體的值
void output(struct Time t) {
	printf("year = %d\n", t.year);
	printf("month = %d\n", t.month);
	printf("day = %d\n", t.day);
	printf("\n");
} 

int main(void) {
	int i;
	struct Time tarr[I];
	printf("請輸入這%d個結構體變量的值:\n", I);
	for (i=0; i<I; i++) {
		scanf("%d", &tarr[i].year);
		scanf("%d", &tarr[i].month);
		scanf("%d", &tarr[i].day);
	}
	printf("輸出結果爲:\n");
	for (i=0; i<I; i++) {
		output(tarr[i]);
	}

	return 0;
}

示例輸出結果爲:


嵌套的結構

其實,有時候爲了方便,也會在結構體中定義結構體變量,如下例

5

# include <stdio.h>

struct time {
	int hour;
	int minute;
	int second;
};

struct Time {
	int year;
	int month;
	int day;
	struct time st;
};

//輸出結構體的值
void output(struct Time t) {
	printf("year = %d\n", t.year);
	printf("month = %d\n", t.month);
	printf("day = %d\n", t.day);
	printf("hour = %d\n", t.st.hour);
	printf("minute = %d\n", t.st.minute);
	printf("second = %d\n", t.st.second);
	printf("\n");
} 

int main(void) {
	int i, t;
	struct Time tarr[] = {{1949, 10, 1, {5, 40, 00}}, {1963, 8, 1, {12, 0, 0}}, {2008, 8, 8, {16, 38, 45}}};
  	t = sizeof(tarr) /sizeof(tarr[0]);
    for (i=0; i<t; i++) {
    	output(tarr[i]);
    }
    
	return 0;
}

輸出結果爲:


注意第2123行代碼,輸出一個結構體中的其他結構體變量的值


【所有代碼均在windows系統下dev c++下運行通過】

(如有錯誤,敬請指正)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章