学习笔记---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);
注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
- 学习笔记---main函数参数-动态存储管理与动态数组
- 【操作系统笔记】动态存储管理
- C语言及程序设计提高例程-39 动态存储管理与动态数组的实现
- C语言提高-39讲: 动态存储管理与动态数组的实现(实践)
- C++学习笔记 - main()函数及其参数
- linux 系统编程-学习笔记6-main函数/atexit函数/动态库、静态库/
- 学习笔记---动态数组实现
- 学习笔记之动态数组
- SystemVerilog学习笔记 - 动态数组
- 数据结构复习笔记七:动态存储管理
- 多维动态数组作为函数传递参数
- fortran 以动态数组为函数参数
- C++动态二维数组作为函数参数
- spring学习笔记——引用bean的属性值,动态管理网站参数与菜单项
- C++动态内存创建与内存管理学习笔记[1]
- C++动态内存创建与内存管理学习笔记[2]
- C++动态内存创建与内存管理学习笔记[3]
- C++动态内存创建与内存管理学习笔记[4]
- Shell脚本的基本知识
- JavaScript Dom编程艺术 阅读笔记
- 迷宫问题 POJ - 3984
- 动态规划 DP
- html中隐藏域hidden的作用
- 学习笔记---main函数参数-动态存储管理与动态数组
- 汇编语言(王爽) 一
- js学习笔记
- 【t030】数字构造
- 【Python】URL深度采集+源码分析
- Git使用操作
- 博为峰Java技术文章 ——JavaSE Swing JScrollPane滚动条容器I
- spring bean的获得方式
- 积极应对认真调查Note7燃损原因 彰显企业担当