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

来源:互联网 发布:淘宝精品服饰广告案例 编辑:程序博客网 时间:2024/05/18 12:40

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>//这个程序用来测试mallocint 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创建的数组,其大小可以随用户输入的值改变,十分高效灵活。






0 0
原创粉丝点击