• 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;
    }


     

  • 相关阅读:
    【刷题之路】LeetCode 面试题 03.02. 栈的最小值
    【Mac 教程系列第 18 篇】如何修改 iTerm2 的背景图片
    Direct3D的初始化
    (173)FPGA约束:单周期时序分析或默认时序分析
    ue5 右击.uproject generator vs project file 错误
    无需公网IP,如何远程访问内网SVN服务?
    带负电荷羧基化/异性电荷PH响应性非球形/电荷磺酸基/电荷羧基聚苯乙烯微球研究步骤
    微信小程序接入火山引擎埋点数据
    用springboot+elasticserach7的demo,对比sider和百度ai的异同
    神经网络算法处理器设计,神经网络是机器算法吗
  • 原文地址:https://blog.csdn.net/zzjlhlcd/article/details/127712000