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;

用->表示指针所指结构变量中成员。

 

  

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。