dAY12

1.指针接收:

        void *p可以接收任意类型的数据。

2.函数接口:

        头文件<string.h>

        memset(首元素地址,内容,从内存开始的长度);  : 用来设置内存,通常用来清零。不关心指针类型

3.数组指针和指针数组

        int *p [5];  p = &a;

        int *arry[5] [5];

4.const关键字:

        修饰只读变量, 只能在初始化时赋值,防止被修改。只控制修饰部分。

5.基本数据类型——布尔类型bool

        头文件<stdbool.h>

        bool类型只有true和false。

        bool isjs = (?true:false)

6.构造数据类型(自定义数据类型)
        结构体数据类型定义:

        struct 结构体类型名

        {

                数据类型1 变量1;

                数据类型2 变量2;

                数据类型3 变量3;

                ......        

        };

struct student

        {

                char name[32];

                char sex;

                int age;

                float score;     

        };

        结构体里可以定义结构体,嵌套。

        嵌套结构体:

                struct 结构体类型名

                {

                        struct 结构体类型名1

                        {

                                数据类型a 变量a;

                                数据类型b 变量b;

                                数据类型c 变量c;

                                .....        

                        } 变量名1;

                       ......  

                };


                无名结构体不可以被引用。

        struct A
            {
                struct A b;
                int a;
            };
            
            struct A
            {
                struct A *p;
                int a;
            };
            
            struct B;
            struct A
            {
             struct B *p;
                 int i;                                                                                                                                                       
            };
             
            struct B
            {
                 struct A *p;
                 float f;
            };

        结构体数据所占内存大小:

                sizeof(struct student) = 44 ?????

                结构体对齐原则:
                内存分配的规律:

                        1.结构体成员变量分配在内存中的起始地址一定是自身基本数据类型整数倍的地址

                        2.结构体的大小必须是自身最大数据成员的整数倍

                        3.32位操作系统4字节对齐,64位操作系统8字节对齐

                        4.强制n字节对齐  #pragma pack(n)

        关键字:typedef

                定义一个类型别名,作用是标注和少打点字。

                typedef  数据类型  类型别名_t;

                定义指针: typedef  int  (*parry_t)[10];

                parry_t    p;

                定义结构体:

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

         结构体数据类型变量的初始化:

                全部初始化

                stu_t stu2 = {"zhangsan", 'J', 28, 59.9};
                struct datetime dt0 = {{2023, 11, 8},{14, 23, 30}}; 

                局部初始化 

                struct datetime dt1 = {
                 {
                     .year = 2023,
                     .day = 8
                 },
                 {
                     .hour = 14,
                     .sec = 30
                 }
                 };

          结构体数据类型变量的访问:

                        "."结构体成员运算符,顾名思义,.变量名    

                        "->" 箭头运算符( -> )的左边的操作数是一个指向结构体的指针。

                        相同点:两者都是二元操作符,而且右边的操作数都是成员的名称。

                        不同点:点运算符( . )的左边操作数是一个结果为结构的表达式;

          结构体类型函数传参

                直接传参

                        scanf("%s %c%d%f", pStu->name, &(pStu->sex......)

                间接传参

                        i= 0;

                        scanf("%s %c%d%f", pStu[i].name, pStu[i].age......)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值