学习笔记---main函数参数-动态存储管理与动态数组

41 篇文章 0 订阅
10 篇文章 0 订阅

main函数参数


常用形式:main(int argc,char *argv[]);

参数解析:

int argc;   命令行由几部分构成

char *argv[];   指针数组,指向各部分的字符串


代码示例:

#include <stdio.h>
#include <stdlib.h>
//这个程序用来测试main函数参数
int main(int argc,char *argv[])
{
    int count;
    printf("The command line has %d arguments:\n",argc);
    for(count=0;count<argc;count++)
        printf("%d : %s\n",count,argv[count]);
    return 0;
}

结果:


解析:

如上图,当在DOS下使用命令行打开程序时,接受到的命令会作为main函数的参数传入程序


代码示例2:

#include <stdio.h>
#include <stdlib.h>
//这个程序用于文件复制
int main(int argc,char *argv[])
{
    FILE *fpin,*fpout;
    if(argc<3)
    {
        printf("you must provide the source and target file.\n");
        exit(0);
    }
    if((fpin=fopen(argv[1],"r"))==NULL)
    {
        printf("the source file open fail.\n");
        exit(0);
    }
    if((fpout=fopen(argv[2],"w"))==NULL)
    {
        printf("the target file open fail.\n");
        exit(0);
    }
    char ch;
    while((ch=getc(fpin))!=EOF)
        putc(ch,fpout);
    fclose(fpout);
    fclose(fpin);
    printf("copy succed!\n");
    return 0;
}
结果:



解析:如上,程序成功执行。


动态存储管理


分配存储空间函数:void *malloc(size_t n);

动态存储释放函数:void free(void *p);


需要头文件:#include <stdlib.h>或<malloc.h>


例:

float *score;
score=(float *)malloc(sizeof(float));
if(socres==NULL)
{
    ....
}
*score=98.5;
....
free(score);


注1: 因为要使指针的类型和分配给指针的存储空间的类型相匹配。所以 malloc的参数一般使用sizeof(指针的数据类型) 尽量不要使用常量作为参数 因为在不同的系统中同一个数据类型的大小是不同的)


注2:如果存储空间分配失败(电脑内存不足)malloc就会返回NULL,否则返回void类型的地址值,将之强制转换成需要的类型即可使用。


注3:因为使用malloc分配的空间不会被系统自动释放!使用完后一定要用free函数释放空间!


代码示例1:

#include <stdio.h>
#include <stdlib.h>
//这个程序用来测试malloc动态分配空间
int main()
{
    int *p1,*p2,max;
    p1=(int *)malloc(sizeof(int));//动态分配空间
    p2=(int *)malloc(sizeof(int));
    *p1=100;
    *p2=10;
    if(*p1>*p2)
        max=*p1;
    else
        max=*p2;
    printf("max=%d\n",max);
    free(p1);//释放空间
    free(p2);
    return 0;
}
结果:


解析:

如上,成功分配了空间。


代码示例2:

#include <stdio.h>
#include <stdlib.h>
//这个程序用来测试malloc
int main()
{
    char *s;
    s=(char*)malloc(80);//这一段十分重要!如果不为s分配空间的话,将出现野指针异常!
    gets(s);
    puts(s);
    free(s);
    return 0;
}
结果:


解析:

如上,在字符串处理方面也有其用处。


动态数组


定义:可以根据需要分配空间的数组


代码示例:

#include <stdio.h>
#include <stdlib.h>
//这个程序用来测试动态数组
//计算小组内同学的平均分
int main()
{
    int *score;
    int num,i,total=0;
    float aver;
    printf("小组共有多少名同学?");
    scanf("%d",&num);
    score=(int*)malloc(num*sizeof(int));//使用动态分配空间的方式创建数组
    printf("请输入学生成绩:\n");
    for(i=0;i<num;i++)
    {
        scanf("%d",score+i);//或&score[i]
        total+=*(score+i);//或score[i]
    }
    aver=1.0*total/num;
    printf("平均成绩:%5.2f",aver);
    free(score);
    return 0;
}
结果:


解析:通过malloc创建的数组,其大小可以随用户输入的值改变,十分高效灵活。






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值