C语言的学习日志1.22

结构:

        声明:struct 结构名{数据类型 变量名;  数据类型 变量名;  数据类型 变量名;};

它跟本地变量一样,如果在main函数里面进行声明,那么只能在main函数里使用,如果在main函数外声明,则可看成全局变量。

        使用与定义: 举个例子,如果声明了 struct point{int year; int month; int day;}; ,那么使用时只需在所在的给他定义变量,例如: struct point today;意思就是定义了一个today的结构变量,而后续如果想用today结构变量中的值的话,形式如下: today.year;就是结构变量名+“.”运算符。

        结构运算: 1.赋值运算:结构变量也要赋初始值,可以struct 结构名 变量名 ={0};就是将结构里的值全部赋为0。

                        还有一种形式就是可以只赋值结构里的部分变量,其余变量就和数组一样全部默认赋值为0。

                        两个结构变量之间的赋值有结构变量名1=(struct 结构名){值1,值2} 意思就是 将结构变量1的两个值赋值为结构变量中的两个值。

                        还有一种就是 直接变量名1=变量名2,过程即直接将变量名2中的所有值赋值给变量名1.

                        2.取地址:它与数组不同,运用指针时,需要&运算符来定义指针,例如:struct 结构名 *指针名 = &变量名,意思是定义一个指向结构的一个结构变量的地址。

        结构作为函数参数:整个结构可以作为参数的值传入函数,过程相当于在函数中新建一个结构变量,并赋值调用者的结构的值,它可以返回一个值,也可以返回一个结构。

        如何用scanf传入结构的值:1.构造一个结构函数,给函数传入值是void,中间创造一个中间结构,传出这个结构,主函数的结构调用这个函数就可以了。

struct point inputPoint()
{
    struct point temp;
    scanf("%d %d",&temp.x,&temp.y};
    return temp;
}
void main()
{
    struct point y={0,0};
    y= inputPoint();
}

                                                      2.运用结构指针:构造一个指向结构的指针,传入这个结构指针参数进入函数,最后返回这个结构就可以了。这里有个小知识:可以用‘->’表示指针所指的结构变量中的成员。

#include<stdio.h>
struct point
{
	int x;
	int y;
};
struct point*inputPoint(struct point*p)
{
    scanf("%d",&p->x);
    scanf("%d",&p->y);
    return p;
}
int main(void)
{
    struct point y={0,0};
    inputPoint(&y);
    printf("%d %d",y.x,y.y);
}

        结构的嵌套

         结构中的结构的数组:

#include <stdio.h>
struct point{
    int x;
    int y;
};
struct rectangle {
    struct point p1;
    struct point p2;
};
void printRect(struct rectangle r)
{
    printf("<%d, %d> to <%d, %d>\n", r.p1.x, r.p1.y, r.p2.x, r.p2.y);
}
int main(int argc, char const *argv[])
{
     int i;
     struct rectangle rects[ ] = {{{1, 2}, {3, 4}}, {{5, 6}, {7, 8}}}; // 2 rectangles
     for(i=0;i<2;i++) printRect(rects[i]);
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值