main中的两个参数和引出的一个问题。

来源:互联网 发布:苹果文字识别软件 编辑:程序博客网 时间:2024/04/28 08:08
好像很忙最近,白天上班晚上看书日子是不好过。


好多东西想去学还是感觉时间不够用,最近一直再看两本书感觉很有用,给大家分享一下,


以此来对本文开题。


一本是《大话数据结构》,推荐理由:内容朴实,易懂,图多,适合我这种算法类的菜鸟。而且有历程看完可以事件,去改一些例子,然后再去实现其他功能,是一本很好的学习教程,也能提高学习的主管能动性。。。


另一本是《c缺陷与陷阱》,看着这本书回忆着几个月前看的《c专家编程》思路涌现,对c的理解更上一层楼。绝对都是必看级别的。。。只叹大学不懂事用错书了。。。


好了言归正传,开始本文内容。。。


因为平时工作会用到dos和linux,所以带参数函数就用的比较多。


比如,fdisk -l 列出硬盘信息,wc -l列出代码行数等等 这些都是带参数函数的例子。


为什么要带参数?
我认为是:为了丰富程序内容的可选择性,实现多功能于一体的函数。


下面看下门函数的原型:


[code=C/C++]
int main(int argc,char** argv)
{
主函数内容
}
[/code]


两个主要的参数:


argc:函数参数的个数,类型是int。例如:fdisk -l 带了一个参数就说明此时的argc 为2,因为fdisk是一个 -l又是一个参数。


char** argv等价于 char* argv[] :argv是一个指针数组。


那么他到底指向的是什么元素?
请看下面的例子


[code=C/C++]
//做一个程序实现在console端输入 hello -h,让他输出helloworld
  1 #include <stdio.h>
  2 int main(int argc,char ** argv)
  3 {
  4         if(argc!=2)
  5                 printf("Error Parameters\n");
  6 
  7         else{
  8                 if(strcmp(argv[1],"-h")==0)
  9                 {
 10                         printf("hello,world\n");      
 11                 }
 12                 else
 13                 {
 14                         printf("No this function\n");     
 15                 }
 16         }
 17         return 0;
 18 }
[/code]


我们从console端输入的参数就存入了 argv[1]中吗?显然不是。

那么argv[1]就存入了所输入的元素。将char ** argv转换为:char* argv[],为指针数组。继续看,第二个参数实际上是一个数组,

数组中的每一个元素都是指向char类型的指针。argv[1]就存储着指向这个char字符串的指针。

再看,strcmp:

[code=C/C++]
       #include <string.h>
       int strcmp(const char *s1, const char *s2);

[/code]


两个参数都是指针。


那么从console端输入的参数到底存到哪里了?





原创粉丝点击