C语言中main函数的参数详解

main函数的定义形式 

main函数可以不带参数,也可以带参数,这个参数可以认为是 main函数的形式参数。C语言规定main函数的参数只能有两个,习惯上这两个参数写为argc和argv。所以C99标准中规定只有以下两种定义方式是正确的:

int main(void) //无参形式

int main(int argc, char *argv[]) //有参形式

当然有参形式可以进行演变,所以下面的写法也是正确的(同时变量名是可以更换的):

int main(int argc, char **argv) //有参的另一种形式

为什么可以演变?

根据前面的一些介绍,可以看出终端传递给main函数的参数是一个二维数组的首地址,这个二维数组的每一维都是一个字符串。既然这样的话就比较好理解了,当我们在调用函数的时候如果传递的是数组首地址的话,那么传递过去的参数会进行退化为指针,比如传递的是int型数组a,接收方接收到的就是一个int *类型的指针,所以这里也是一样,终端传递给main函数的二维数组也会退化成二级指针即char **。

main函数参数的值

再来说一说main函数的参数的值,假设你在终端上运行./test  hello world

那么argc和argv的值分别为多少呢?argc的值为3,而argv里面的字符串也为3个,这是因为你在运行C程序的时候系统默认会把可运行文件的名字也作为一个参数传递给main函数,并且参数的第一个就是可运行文件的名字(会包含详细路径)。

使用main函数的参数

基于上面的分析,下面继续看看如何使用main函数传递过来的参数,下面一段程序片段是打印出main函数接收到的参数:

for(i=0; i < argc; i++)

printf("%s\n", *argv++);

这个是没有问题的,另一种操作方式是:

for(i=0; i < argc; i++)

printf("%s\n", argv[i]);

但是最后的一种方式就是错误的:

for(i=0; i < argc; i++)

printf("%s\n", *argv[i]);

我最开始尝试的就是这种方式,居然出现错误了,这是为何?argv是一个指针数组名,那么argv[0]、argv[1]这就是一个指针的值啊,然后再使用*p的方式取用里面的数据,怎么会出错呢?最后终于想明白,这是打印的字符串,所以只需要传递数组名或者指针值就可以了!比如定义了

char *p="Hello world.";

如果要打印这个字符串当然使用的是

printf("%s\n", p);

如果打印*p的话,岂不是只取了字符串中的一个H字符,打印当然是会报错的。

时间: 2024-10-20 12:11:45

C语言中main函数的参数详解的相关文章

C语言中main函数的参数

代码: 1 #include <iostream> 2 #include <string> 3 #include <cstdio> 4 5 using namespace std; 6 7 int main(int argc,char* argv[]){ 8 9 for(int i=0; i<argc; i++) 10 cout<<argv[i]<<endl; 11 12 return 0; 13 } 输入: ./test kd ie 3

wordpress分类目录函数:wp_list_cats参数详解

今天修改主题模板时相直接调用分类目录,查了一下分类目录函数wp_list_cats(); WordPress分类目录常用格式 <?php wp_list_cats(“sort_column=ID&hide_empty=0&optioncount=1″);?> 该函数表示:分类目录按ID排列,不显示没有文章的分类,显示分类目录下的文章数量 wp_list_cats函数参数如下: sort_column默认值为ID,可选ID 或 name,分别表示按 ID 值或分类名称排序sort

Oracle 时间,日期 类型函数及参数详解

ORACLE字符数字日期之间转化 Java代码 24 小时的形式显示出来要用 HH24 select to_char(sysdate,'yyyy-MM-dd HH24:mi:ss') from dual; select to_date('2005-01-01 13:14:20','yyyy-MM-dd HH24:mi:ss') from dual; to_date() function 1. 日期格式参数 含义说明 D 一周中的星期几 DAY 天的名字,使用空格填充到 9 个字符 DD 月中的第

函数的参数详解

# 函数的参数 定义函数的时候,我们把参数的名字和位置确定下来,函数的接口定义就算完成了. 对于函数的调用者来说,只需要知道如何传递正确的参数,以及函数将返回什么样的值就够了 函数内政部的复杂逻辑被封装起来,调用者无需了解. python的函数定义非常简单,单灵活度却非常大.除了正常定义的必选参数外, 还可以使用默认参数.可变参数和关键字参数,使得函数定义出来的接口,不但能处理复杂的参数 还可以简化调用者的代码. 一.位置参数 我们先写一个计算x的平方的函数 def power(x): retu

python函数动态参数详解

Python的动态参数: 1,参数前一个"*":在函数中会把传的参数转成一个元组.   func (*       func(123,1,2,)   result:(123, 1, 2, 'a') 2,"**args"的参数:函数中被转成一个字典. 如果这样传参的话会报错,因为没有指定key或value:def func (**args):    print(args) func(123,1,2,'a') result:TypeError: func() takes

C语言中的getchar和putchar详解

首先给出<The_C_Programming_Language>这本书中的例子: #include <stdio.h> int main(){    int c;     c = getchar();     while (c != EOF)    {          putchar();              c= getchar();      }    return 0;} 这里主要解释下为什么要用int型来接受getchar函数. 很多时候,我们会写这样的两行代码:c

CURL 重要函数Curl_setopt参数详解

CURLOPT_HEADER:设为1,则在返回的内容里包含http header: CURLOPT_FOLLOWLOCATION:设为0,则不会自动301,302跳转: *CURLOPT_INFILESIZE: 当你上传一个文件到远程站点,这个选项告诉PHP你上传文件的大小.*CURLOPT_VERBOSE: 如果你想CURL报告每一件意外的事情,设置这个选项为一个非零值.*CURLOPT_HEADER: 如果你想把一个头包含在输出中,设置这个选项为一个非零值.*CURLOPT_NOPROGRE

PHP 时间函数 date 参数详解

time();表示的是从1970-01-01到现在共走了多少秒,不便于看,但便于计算 要找出前一天的时间就是 time()-60*60*24; 要找出前一年的时间就是 time()*60*60*24*365 那么如何把这个数字换成日期格式呢,就要用到date函数了 $t=time(); echo date("Y-m-d H:i:s",$t); 第一个参数的格式分别表示: a - "am" 或是 "pm" A - "AM" 或是

jQuery---ajax---error函数及其参数详解

使用jquery的ajax方法向服务器发送请求的时候,常常需要使用到error函数进行错误信息的处理,本文详细说明了ajax中error函数和函数中各个参数的用法. 一般error函数返回的参数有三个:function(jqXHR jqXHR, String textStatus, String errorThrown),常见代码调用如下: 1 $.ajax({ 2 url: '/Home/Index', 3 success: function (data) { 4 alert(data); 5