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);
注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创建的数组,其大小可以随用户输入的值改变,十分高效灵活。