C语言学习--结构体
结构体定义三种方式:
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;
用->表示指针所指结构变量中成员。
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。