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 <stdio.h>
#include <stdlib.h>
#include <string.h>


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 <stdio.h>
#include <stdlib.h>
#include <string.h>


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 <stdio.h>
#include <stdlib.h>
#include <string.h>


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 <stdio.h>
#include <stdlib.h>
#include <string.h>


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


 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Bryan Ding

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值