• C语言之指针数组、结构体、动态内存分配


    1、sizeof()
    int main()
    {
        int a[20];
        int count=sizeof(a)/sizeof(int);
        printf("%d\n",count);
        
        return 0;
    }


    2、指针数组
    整型数组   int a[20];

    int a=10;
    int b=20;
    指针数组   int *a[20]={&a,&b};


    char c='m';
    char d='n';

    char b[20]="hello";
    char *b[20]={&c,&d};

    char *argv[]={"hi","sunhong"};

    3、字符串函数
    strlen  和   sizeof   的区别
    #include
    #include
    #include


    int main(int argc,char *argv[])
    {
        char *str="hello";
        size_t count=strlen(str);
        printf("%d\n",count);
        printf("zhizhen str is%d\n",sizeof(str));
        return 0;
    }


    难点:字符串初始化辨析
    int main(int argc,char *argv[])
    {
        char *str="hello";                //等号左边  是 地址变量-----等号右边 也必须是 地址
        char str2[20]="hello";            //等号左边定义了1个数组,现在要给数组的20个元素赋值-----等号右边是每个元素 的 值    数组名-----是h字符的地址
                                        //原因是 = 是用在给变量定义时,同时又初始化

        return 0;
    }


    int main(int argc,char *argv[])
    {
        char *str="hello";
        char str2[20]="hello";

        char ch1;
        char *str;
        str=&ch1;                //就是简单的赋值,  = 两边的类型一致 就可以了----因为不是定义的同时进行初始化

        char str2[20];
        str2[0]='h';            //就是简单的赋值,  = 两边的类型一致 就可以了

        return 0;
    }


    难点:strlen和sizeof的区别
    1、strlen必须针对字符串
    2、sizeof()的参数为 真数组名、假数组名时,结果不同
    3、sizeof()的参数可以为:变量名、数据类型int double

    int main(int argc,char *argv[])
    {
        char *a="hello";    //sizof的结果为4
        //char a[]="hello";  sizeof的结果为6
        
        sizeof(a);


        return 0;
    }


    结构体

    知识点:
    给字符型数组 赋值 的方法:
        char name[20];
        //name="zhangan";    name是常量
        strcpy(name,"zhangsan");

    结构体:
    知识点:
    1、我们自己定义1个数据类型,它叫 Student-------int   同级别

    struct Student
    {
        int number;
        char name[20];
    };

    int main(int argc,char *argv[])
    {
        struct Student stu1={1001,"zhangsan"};    //定义变量的同时,进行初始化
        printf("number is%d\n",stu1.number);
        printf("name is %s\n",stu1.name);


        return 0;
    }


    课堂练习:
    输入3个学生信息,然后打印输出
    代码:
    #include
    #include
    #include


    struct Student
    {
        int number;
        char name[20];
    };

    int main(int argc,char *argv[])
    {
        int i;
        struct Student stu[]={1001,"zhangsan",1002,"lisi",1003,"wangwu"};
        for(i=0;i<3;i++)
        {
            printf("%d\t%s\n",stu[i].number,stu[i].name);
        }

        return 0;
    }


    改进后的代码:
    #include
    #include
    #include


    struct Student
    {
        int number;
        char name[20];
    };

    int main(int argc,char *argv[])
    {
        int i;
        struct Student stu[3];
        for(i=0;i<3;i++)
        {
            printf("请输入学号:");
            scanf("%d",&stu[i].number);
            printf("请输入姓名:");
            scanf("%s",&stu[i].name);
        }
        for (i=0;i<3;i++)
        {
            printf("%d\t%s\n",stu[i].number,stu[i].name);
        }

        
        return 0;
    }

    动态内存分配:
        char ch='m';
        char *name;
        //name=&ch;
        name=malloc();

    改进后的代码-----name为char *,使用malloc
    代码:
    #include
    #include
    #include


    struct Student
    {
        int number;
        char *name;
    };

    int main(int argc,char *argv[])
    {
        
        int i;
        char buffer[100]={'\0'};
        struct Student stu[3];
        for(i=0;i<3;i++)
        {
            printf("请输入学号:");
            scanf("%d",&stu[i].number);
            printf("请输入姓名:");
            //stu[i].name=malloc()
            scanf("%s",buffer);
            stu[i].name=(char *)malloc(strlen(buffer)+1);
            strcpy(stu[i].name,buffer);

        }
        for (i=0;i<3;i++)
        {
            printf("%d\t%s\n",stu[i].number,stu[i].name);
        
        }
        
        
        return 0;
    }


     

  • 相关阅读:
    STM32H5开发(5)----串口打印配置
    git-secret:在 Git 存储库中加密和存储密钥(上)
    (王道408考研操作系统)第二章进程管理-第一节6:线程的实现方式和多线程模型
    Ubuntu遇到Gemfiie指定版本怎么解决
    Web程序设计-实验05 DOM与BOM编程
    ChatGPT推出新“朗读”功能 支持多语言与声音;使用大型语言模型增强分类数据集
    开源依赖管理的最佳实践
    若依分页问题
    java在线问卷调查系统的设计与实现(springboot+mysql源码+文档)
    轻松实现远程访问本地wamp服务器,无公网IP也不怕,「内网穿透」
  • 原文地址:https://blog.csdn.net/zzjlhlcd/article/details/127712000