- 1、本文档共73页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
C企业要求与实践book
C企业要求与实践
(讲义)
C语言基础
main函数的参数与返回值
main的参数
命令行界面的程序,通常都需要输入命令行参数帮助程序执行。假定有一个可执行程序名为test。那么运行该程序的的命令行如下:
test
带命令行参数是同一行中的附加项:
test –c TEST
其中 –c 和 TEST就是命令行参数。C程序可以将这些附加参数读出来,并为自己所用,比如作为程序运行的条件(经常看到调试参数 –D 就是这么一个)。C程序通过使用main()的参数来读取这些附加参数,下面的repeat.c给出一个读出main参数的例子:
例1.1:
#include stdio.h
#include stdlib.h
int main(int argc, char *argv[])
{
??? int count;
??? printf(The command line has %d arguments:\n, argc - 1);
??? for(count = 1; count argc; count++)
??? {
??????????? printf(%d: %s\n, count, argv[count]);
??? }
??? printf(\n);
???
??? //system(PAUSE);
??? return 0;
}
这里先解释一下main(int argc, char*argv[])这个函数中两个参数的意义,argc记录的是命令行中输入参数的数目,argv是一个拥有argc个元素的字符串数组,每个元素保存一个命令行中输入的参数。
编译这个文件为可执行文件repeat:
gcc repeat.c -o repeat
按下列方式执行 repeat 程序
./repeat I love you 3
输出如下:
The command line has 3 arguments:
1: I
2: love you
3: 3
在这个例子中,argc的值为4,命令行一共输入了四个参数“./repeat”、“I”、“love you”、“3”。在DOS和UNIX环境下,命令行参数中用””符号表示其是一个字符串,视为一个参数。
main函数的返回值
main函数的返回值用于说明程序的退出状态。如果返回0,则代表程序正常退出;返回其它数字的含义则由系统决定。通常,返回非零代表程序异常退出。下面我们在winxp环境下做一个小实验。首先编译下面的程序:
???????? ??int main( void )
??? ??????{
??????? ?????????return 0;
??? ??????}
?然后打开附件里的“命令提示符”,在命令行里运行刚才编译好的可执行文件,然后输入“echo%ERRORLEVEL%”,回车,就可以看到程序的返回值为0。
假设刚才编译好的文件是a.exe,如果输入“a dir”,则会列出当前目录下的文件夹和文件。但是如果改成“return -1”,或者别的非0值,重新编译后输入“a dir”,则dir不会执行。因为的含义是:如果前面的程序正常退出,则继续执行后面的程序,否则不执行。也就是说,利用程序的返回值,我们可以控制要不要执行下一个程序。这就是int main的好处。如果你有兴趣,也可以把main函数的返回值类型改成非int类型(如float),重新编译后执行“a dir”,看看会出现什么情况,想想为什么会出现那样的情况。顺便提一下,如果输入a || dir的话,则表示如果a异常退出,则执行dir。
类型转换
隐式转换
隐式转换就是编译器在自动帮助程序员做的类型转换工作,既然是编译器自动转换,那么这种转换必须具有足够的安全性,这是编译器的责任。
double d1 = 100;
int i1 = 100;
double d2 = i1;
这种转换是安全的,double类型占据的内存字节数比int类型的要大,而且double类型能表示的整数范围也比int大,因此int类型到double类型的转换是安全的,没有精度损失的,上例中的转换是隐式的,由编译器自动完成的。
强制转换
强制转换是有能导致安全问题的,如果占据内存字节数较多的类型转换为占据内存字节数较少的类型转换,那么就有可能造成精度的损失。
double d3 = 1.25e+20;
double d1 = 10.25;
int i2 = (int)d3;
int i3 = (int)d4;
i2为d3转换为int类型的结果,double类型转换为int类型属于大转小,可能会损失精度d3数字很大,i2的类型无法存储如此大的数字,将会溢出。
选择结构
if分支
if语句是C++/C语言中最简单、最常用的语句,然而
文档评论(0)