Linux C编程学习--main()函数简析

提到C语言的函数,有太多内容要讲,今天我们要看的是main()函数。

main()函数时程序的入口点,任何程序都要有main()函数,一般大家都怎么写main()函数啊?

main();

void main();

void main(void);

int main();

int main(void);

int main(int argc,char * argv[]);

好像哪种都可以啊!是这样吗?好像编译器从没报过错啊?这时因为编译器对main()函数的扩展,如果编译器不支持这块,则有可能会报错,而标准的写是什么呢?有两种:

int main(void);

int main(int argc,char *argv[]);

有的同学做过单片机,好像都是main()啊,也没问题啊,这时因为单片机程序中没人调用main()函数,直接从main()函数调用完了,没返回值。而对我们嵌入式linux C 呢?这里是有操作系统的,是会调用main()函数的,所以这里一般会有返回值,所以 int main(int argc,char *argv[])是最标准的写法。我们今天要讲的就是int main(int argc,char *argv[])!

argc是什么?是参数的个数,什么参数?是我们执行程序时所附给的参数,argv[]是什么,是存放参数的数组,argv[0]是什么呢?是我们执行的程序,例如: ./a.out 。我们下面编写程序看函数时如何调用参数的?

[cpp] view plaincopy
  1. #include <stdio.h>  
  2.   
  3. int main(int argc, char *argv[])  
  4. {  
  5.     int i;  
  6.     for(i = 0;i < argc;i++)  
  7.     printf("%s\n",argv[i]);  
  8.   
  9.     return 0;  
  10. }  

执行结果如下:

[cpp] view plaincopy
  1. fs@ubuntu:~/qiang/hanshu$ gcc -o 1 1.c  
  2. fs@ubuntu:~/qiang/hanshu$ ./1 xiao zhi qiang  
  3. ./1  
  4. xiao  
  5. zhi  
  6. qiang  
  7. fs@ubuntu:~/qiang/hanshu$   

大家可以看到参数被存在什么位置,是怎么存放的。

那我们能不能对传入的参数进行运算呢?当然可以了!比如下面 传入参数 ./ 1  30 50,将30和50相加。看程序:

[cpp] view plaincopy
  1. include <stdio.h>  
  2.   
  3. int tt(char *p)  
  4. {  
  5.     int sum = 0;  
  6.     while(*p)  
  7.         sum = sum*10 + *p++ -'0';  
  8.   
  9.     return sum;  
  10. }  
  11.   
  12. int main(int argc, char *argv[])  
  13. {  
  14.     int j;  
  15.     int count = 0;  
  16.     for(j = 1;j < argc;j++)  
  17.     {  
  18.         count += tt(argv[j]);  
  19.     }  
  20.     printf("%d\n",count);  
  21.     return 0;  
  22. }  


执行结果如下:

[cpp] view plaincopy
  1. fs@ubuntu:~/qiang/hanshu$ ls  
  2. 1  1.c  hanshu  hashu.c  
  3. fs@ubuntu:~/qiang/hanshu$ ./hanshu 30 50  
  4. 80  
  5. fs@ubuntu:~/qiang/hanshu$   

是可以的。

当然这里给大家介绍一个将字符数字转化成整型数字的方法,把上面写得程序给大家看看

[cpp] view plaincopy
  1. int tt(char *p)  
  2. {  
  3.     int sum = 0;  
  4.     while(*p)  
  5.     {   sum *= 10;  
  6.         sum += (*p++) -'0';  
  7.     }  
  8.     return sum;  
  9. }  

 

就是  '8' - '0' = 8;ASCII码值相减,我们的目的是得到8,而不是将字符'8'转化成整数8,这时没法转换的,因为'8'是字符,存放的是ASCII码,是56,所以是没法转化成int数据的,但我们可以利用上面的方法得到8,大家要清楚这一点!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/402541.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

WAS 报错 Font '宋体' is not available to the JVM

今天把WAS迁移到新服务器上&#xff0c;启动应用程序后&#xff0c;有报错内容如下&#xff1a;创建的异常&#xff1a;net.sf.jasperreports.engine.util.JRFontNotFoundException: Font 宋体 is not available to the JVM. See the Javadoc for more details.环境介绍&#x…

解决表字段使用关键字导致Mybatis Generator生成代码异常的解决方案

From: http://blog.itfsw.com/2017/05/23/jiejue-biao-ziduan-shiyong-guanjianzi-daozhi-mybatis-generator-shengcheng-daima-yichang-de-jiejue-fangan/ 在某个项目中遇到这么一个问题&#xff0c;因为原始表结构中某些字段定义使用了MySQL的关键字如match等&#xff0c;在…

用户(三次)登录--作业小编完成

count 0 while count < 3:user input(请输入用户名>>>)pwd input(请输入密码>>>)if user huang and pwd 123:print(欢迎进入黑客帝国)1print(...................)breakelse:print(用户名或密码错误)count count 1 转载于:https://www.cnblogs.com…

从零开始学C++之模板(三):缺省模板参数(借助标准模板容器实现Stack模板)、成员模板、关键字typename...

一、缺省模板参数 回顾前面的文章&#xff0c;都是自己管理stack的内存&#xff0c;无论是链栈还是数组栈&#xff0c;能否借助标准模板容器管理呢&#xff1f;答案是肯定的&#xff0c;只需要多传一个模板参数即可&#xff0c;而且模板参数还可以是缺省的&#xff0c;如下&…

Linux C编程---指针数组简析(二维数组、多级指针)

讲到指针和数组&#xff0c;先给大家看一道例题&#xff1a; 题目&#xff1a;填空练习&#xff08;指向指针的指针&#xff09; 1.程序分析&#xff1a;      2.程序源代码&#xff1a; main() { char *s[]{"man","woman","girl","bo…

使用@Autowired注解警告Field injection is not recommended

From: https://blog.csdn.net/zhangjingao/article/details/81094529 在使用spring框架中的依赖注入注解Autowired时&#xff0c;idea报了一个警告 大部分被警告的代码都是不严谨的地方&#xff0c;所以我深入了解了一下。 被警告的代码如下&#xff1a; Autowired UserDa…

简单的方式优化mysql

参考博客 自己笔记本上向mysql导入txt数据&#xff0c;有一个table导入了将近4个小时&#xff0c;而且多个table之间都是相互之间存在关系的&#xff0c;所以做联合查询的时候你会发现问题会十分的多&#xff0c;我之前联合查询两个表就死机了&#xff0c;所以优化mysql是迫在眉…

9颜色和背景

选择的类名最好描述其中包含的信息类型&#xff0c;而不是想要达到的视觉效果。 一般来说&#xff0c;前景是元素的文本&#xff0c;不过前景还包括元素周围的边框。color属性可以用来设置前景色。color有很多用法&#xff0c;其中最基本的是替换HTML3.2的BODY属性TEXT、LINK、…

linux C --深入理解字符串处理函数 strlen() strcpy() strcat() strcmp()

在linux C 编程中&#xff0c;我们经常遇到字符串的处理&#xff0c;最多的就是字符串的长度、拷贝字符串、比较字符串等&#xff1b;当然现在的&#xff23;库中为我们提供了很多字符串处理函数。熟练的运用这些函数&#xff0c;可以减少编程工作量&#xff0c;这里介绍几个常…

VSFTP的主动模式和被动模式

关于VSFTP的主动模式和被动模式一&#xff0c;首先我们看两个例子如下&#xff1a;其中192.168.10.7是服务端&#xff0c;172.16.11.11是客户端被动模式# netstat -an |grep 172.16.11.11tcp 0 0 192.168.10.7:52160 172.16.11.11:16091 TIME_WA…

SpringBoot项目利用maven自定义打包结构

From: https://blog.csdn.net/q15858187033/article/details/80742117 SpringBoot官方提供的demo中&#xff0c;pom.xml文件里引用了官方提供的打包插件 <build> <plugin> <groupId>org.springframework.boot</groupId> …

20169210《Linux内核原理与分析》第十二周作业

Return-to-libc 攻击实验 缓冲区溢出的常用攻击方法是用 shellcode 的地址来覆盖漏洞程序的返回地址&#xff0c;使得漏洞程序去执行存放在栈中 shellcode。为了阻止这种类型的攻击&#xff0c;一些操作系统使得系统管理员具有使栈不可执行的能力。这样的话&#xff0c;一旦程序…

判断android图片是否硬解码(方法)

2019独角兽企业重金招聘Python工程师标准>>> 在oncreate方面的setContentView(R.layout.main); 前面&#xff0c;添加如下代码&#xff1a; getWindow().setFlags(WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED, WindowManager.LayoutParams.FLAG_HAR…

如何解决Mybatis里mapper文件中关于不能用大于小于号

From: https://blog.csdn.net/qq_38659629/article/details/80408185 用<![CDATA[ ]]>标识 比如&#xff1a;<![CDATA[ where auctionEndTime < now()]]> 另外一种方法就是使用转义字符 < < > > & " < …

Linux C 编程技巧--利用有限状态机模型编程

我们知道&#xff0c;一般编写程序时都要画出流程图&#xff0c;按照流程图结构来编程&#xff0c;如果编写一个比较繁琐&#xff0c;容易思维混乱的程序时&#xff0c;我们可以利用有限状态机模型画出一个状态转移图&#xff0c;这样便可以利用画出的逻辑图来编写程序&#xf…

JVM的垃圾回收机制

发现一篇好文章,能够快速的帮助我们理清楚思路,以下内容转载 JVM的内部结构 先说下jvm运行时数据的划分&#xff0c;粗暴的分可以分为堆区(Heap)和栈区(Stack)&#xff0c;但jvm的分法实际上比这复杂得多&#xff0c;大概分为下面几块&#xff1a; 1、程序计数器(Program Conut…

centos配置ssh免密码登录后仍要输入密码的解决方法

From: https://blog.csdn.net/zwbill/article/details/80448939 前言 在搭建Linux集群服务的时候&#xff0c;主服务器需要启动从服务器的服务&#xff0c;如果通过手动启动&#xff0c;集群内服务器几台还好&#xff0c;要是像阿里1000台的云梯Hadoop集群的话&#xff0c;轨…

Linux c学习--从标准输入输出看流和缓冲区

学习标准输入输出&#xff0c;我们都会遇到一个概念&#xff0c;流和缓冲区&#xff0c;但到底什么是流&#xff0c;什么是缓冲区呢&#xff1f; 书《C Primer Plus》上说&#xff0c;C程序处理一个流而不是直接处理文件。后面的解释十分抽象&#xff1a;『流&#xff08;strea…

ubuntu vim8.0源码安装

安装篇 从https://github.com/vim/vim下载相应zip源码文件&#xff0c;利用unzip vim-master.zip 命令解压到当前用户目录&#xff0c;即~&#xff1b; 解压后进入vim的src目录&#xff0c;首先&#xff0c;即运行 sudo apt-get updata &#xff08;更新系统软件源&#xff09;…

Linux C学习---递归函数

最近学习到了递归&#xff0c;刚开始看&#xff0c;真是头大&#xff0c;函数里面嵌套其本身&#xff0c;到底是怎么个流程啊&#xff1f; 现在&#xff0c;咱们先了解下递归函数的数学原理&#xff1a; 高中的时候就出现很多递归函数&#xff0c;应该是在“级数”那里的习题中…