结构体_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++下运行通过】

(如有错误,敬请指正)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值