技巧学习

1.拆分和拼接一个数的方法

int a = 12345;

//                                                                                                //int a = 3;  int n = 5;

12345   %10  = 5                                                                        0 * 10 + a = 3;                

12345   /  10  = 1234                                                                  a * 10 + a = aa;

 1234   %  10  = 4                                                                       aa *10 + a = aaa;

....

一、主函数传参

int main(void);        void main(void);

int main(int argc , const char  *argv[  ] );

int main(int argc , const char **argv);

argc :传入参数个数;

argv :传入所有参数字符串首地址的指针数组

#include<stdio.h>
int main(int argc, const char **argv)
{
    int i = 0;
    printf("argc = %d\n", argc);

    for(i = 0; argv[i] != NULL; i++)
    {
        printf("argv[%d] = %s\n", i ,argv[i]);    
    }
    
    return 0;
}

二、构造数据类型

*结构体

<一>结构体类型定义

struct 结构体名                                                                struct  student

{                                                                                       {

        数据类型1  成员变量;                                                char  name;

        数据类型2  成员变量;                                                char  sex;

        ......                                                                                int   age;

};                                                                                    };

<二>结构体变量的定义

数据类型             变量名;

struct  student           ;

<三>结构体变量的初始化

使用在<一>中定义的结构体  定义变量

1.全部初始化

struct student a = {" Rose " , ' w ' , 20 , 90};

2.局部初始化

struct student a = {
        .name = {"Rose"},
        .score = 100,
};


struct datetime dt = {
        .d = {
                .year = 2026,
        },
        .t = {
                .hour = 14,
                .min = 20,
        },
};

<四>结构体成员变量的访问

  • 结构体变量类型 访问成员变量  用  访问
  • 指针类型 的 结构体 访问成员变量用 ->
//结构体的类型定义
//        变量定义
//        变量初始化
//        变量访问

#include<stdio.h>

struct date
{
    int year;
    int mon;
    int day;
};

struct book
{
    char bookname[32];
    char writer[32];
    struct date d;      // 要把 构造的日期放到 book 的前面    
};

struct time
{
    int hour;
    int min;
    int sec;
};

struct datetime 
{
    struct date d;
    struct time t;
};

int main(void)
{
    struct book n = {
            .bookname  = {"Harry Poter"},
            .writer = {"J.K.Rowling"},
    };

    struct datetime dt = {
            .d = {
                    .year =1997,
                    .mon = 1 ,
                    .day = 22,
            },                    //注意这里是逗号
            .t = {
                    .hour = 14,
                    .min = 48,
            },
    };

    struct book *p = NULL;
    struct datetime *pdt = NULL;

    p = &n;  //取地址
    printf("bookname:%s\n", p->bookname);
    printf("writer:%s\n", p->writer);

    pdt = &dt;
    printf("%04d-%02d-%02d\n %02d:%02d:%02d\n", pdt->d.year, pdt->d.mon, pdt->d.day,
                                            pdt->t.hour, pdt->t.min, pdt->t.sec);
                                    //注意 . -> 的使用方法
    return 0;
}

<五>结构体的存储

  • 内存对齐
  • 结构体成员变量只能存放在内存地址为自身基本类型长度整数倍的内存单元
  • 结构体的大小必须为最大基本数据类型长度的整数倍

例题:求以下结构体所占字节数

struct s

{

        char a;                 // 1byte

        short b;                //  +1byte 再存 2byte , 4byte

        char c;                 //  5byte

        int d ;                   //  +3byte(补到4的整数倍) 再存 4 byte,  一共12byte

};

<六>结构体作为函数参数

#include<stdio.h>

struct student
{
    char name[32];
    char sex[32];
    int age;
    int scor;
};

void getstudent(struct student *px)
{
    scanf("%s", px->name);  //%s   不用加&
    scanf("%s", px->sex);
    scanf("%d",&px->age);
    scanf("%d",&px->scor);

    return ;
}

void printfsutudent(struct student *px)
{
    printf("name:%s\n sex: %s\n age: %d\n scor: %d\n", px->name, px->sex, px->age, px->scor);
                                                        
    //指针类型的结构体访问成员变量用  ->
    return ;
}

int main(void)
{
    struct student x = {0};

    getstudent(&x);

    printfsutudent(&x);

    return 0;
}

<七>结构体数组

1、类型定义

数据类型        数组名        [元素个数];

struct      student        s     [3];

2、初始化

struct student s[3] = {
{"zhangsan", 'm', 19, 100},
{"lisi", 'f', 18, 90},
{"wanger", 'm', 17, 85},
};

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐