int main (int argc, const char * argv[0]) 中参数的含义;指针数组和数组指针

恩,有的编译器初始化时候会产生这样的参数

argc是命令行总的参数个数,argv[]是argc个参数,其中第0个参数是程序的全名

1. 几种C++ 常见的参数种类

  • int main(void);
  • int main();
  • int main(int argc, char **argv);   //等价于int main(int argc, char *argv[]),是否等价呢?是不是前一个可以表示任意长度的任意个数组,后一个只是定长的任意个数的数组?见下面
  • int main(int argc, char *argv[]);
  • int main(int argc, char arg[][]);
  • argc=3,表示除了程序名外还有2个参数。    argv[0]指向输入的程序路径及名称。    argv[1]指向参数para_1字符串。    argv[2]指向参数para_2字符串。

2. 参数的说明: int argc 表示main函数的参数个数,main函数至少有一个参数,即第一个参数为该main函数所在程序名:即argv[0]的值, argc>=1

char ** argv 表示main函数所在的程序在运行时输入的参数表,用,或者空格分隔:第一个参数存在 argv[1]中 每个第二维数组单元存一位数,例如 biji 12546 即argv[1][0] = 1, argv[1][2]=2, argv[1][3]=5, argv[1][4]=5, argv[1][6]=6, 而argv[1]=12546

第二个参数存在argv[2]中,以此类推。

3. 对于argv存入的实际上是 字符数组, 如果要吧输入的整数字符串转换成整形数,可以调用stl函数 atoi(&argv[1][0])   //注意,不能写&argv[1] 编译会报类型不匹配的错误 error: cannot convert `char**‘ to `const char*‘ for argument `1‘ to `int atoi(const char*)

  &argv[1][0]是取第一个参数的字符数组的首地址。

指针数组和数组指针问题

这两个名字不同当然所代表的意思也就不同。我刚开始看到这就吓到了,主要是中文太博大精深了,整这样的简称太专业了,把人都绕晕了。从英文解释或中文全称看就比较容易理解。

指针数组:array of pointers,即用于存储指针的数组,也就是数组元素都是指针

数组指针:a pointer to an array,即指向数组的指针

还要注意的是他们用法的区别,下面举例说明。

int* a[4]     指针数组

表示:数组a中的元素都为int型指针     (假如没有*,那么就是数组a中全为int 类型的数据)

元素表示:*a[i]   *(a[i])是一样的,因为[]优先级高于*

int (*a)[4]   数组指针

表示:指向数组a的指针 (假如是int (*a),那么就是指向整型a的指针)

元素表示:(*a)[i]

注意:在实际应用中,对于指针数组,我们经常这样使用:

typedef int* pInt;

pInt a[4];

这跟上面指针数组定义所表达的意思是一样的,只不过采取了类型变换。

代码演示如下:

#include <iostream>

using namespace std;

int main()

{

int c[4]={1,2,3,4};

int *a[4]; //指针数组

int (*b)[4]; //数组指针

b=&c;

//将数组c中元素赋给数组a

for(int i=0;i<4;i++)

{

a[i]=&c[i];

}

//输出看下结果

cout<<*a[1]<<endl; //输出2就对

cout<<(*b)[2]<<endl; //输出3就对

return 0;

}

注意:定义了数组指针,该指针指向这个数组的首地址,必须给指针指定一个地址,容易犯的错得就是,不给b地址,直接用(*b)[i]=c[i]给数组b中元素赋值,这时数组指针不知道指向哪里,调试时可能没错,但运行时肯定出现问题,使用指针时要注意这个问题。但为什么a就不用给他地址呢,a的元素是指针,实际上for循环内已经给数组a中元素指定地址了。但若在for循环内写*a[i]=c[i],这同样会出问题。总之一句话,定义了指针一定要知道指针指向哪里,不然要悲剧。

类似的还有指针函数和函数指针,遇到了再说吧。

时间: 2024-10-12 23:10:13

int main (int argc, const char * argv[0]) 中参数的含义;指针数组和数组指针的相关文章

int main(int argc, char **argv)的一些解读

#include <iostream> #include <fstream> #include <string> #include <cstdlib> #include <vector> #include <algorithm> #include <iterator> #include <functional> using namespace std; using namespace std::placehol

int main(int argc,char* argv[])详解

argc是命令行总的参数个数     argv[]是argc个参数,其中第0个参数是程序的全名,以后的参数     命令行后面跟的用户输入的参数,比如:     int   main(int   argc,   char*   argv[])     {     int   i;     for   (i   =   0;   i<argc;   i++)     cout<<argv[i]<<endl;     cin>>i;     return   0;  

38&gt;&gt;int main( int argc, char **argv)

1.参数 (有时参数是void) argc是程序运行时参数个数 argv是存储参数的数组,可以用char* argv[],也可以用char **argv. 例如编译一个hello.c的程序 1 #include<stdio.h>  2 int main(int argc,char *argv[])  3 {  4     printf("%d\n",argc);  5     printf("%s\n",argv[0]);  6     /*printf

int main(int argc,char *argv[])的具体含义

int main(int argc,char * argv[]) argv为指针的指针 argc为整数 char **argv or: char *argv[] or: char argv[][] main()括号内是固定的写法. 下面给出一个例子来理解这两个参数的用法: 假设程序的名称为prog, 当只输入prog,则由操作系统传来的参数为: argc=1,表示只有一程序名称. argc只有一个元素,argv[0]指向输入的程序路径及名称:./prog 当输入prog para_1,有一个参数

关于int main(int argc,char* argv[])详解

平时在VS的环境下,主函数总会看到这两个参数,今天突然很想知道这两个参数的原理以及作用,因此查了下资料.真心受教了. 下面的博文是在百度空间看一位大神的,原文链接:http://hi.baidu.com/sgglong70626/item/8881322b2dce21c1ee10f11e argc是命令行总的参数个数   argv[]为保存命令行参数的字符串指针,其中第0个参数是程序的全名,以后的参数为命令行后面跟的用户输入的参数,argv参数是字符串指针数组,其各元素值为命令行中各字符串(参数

int main(int argc,char *argv[])参数的应用

#include <stdio.h> #include <unistd.h> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> //a.out src.txt dest.txt //argv[0] int main(int argc,char *argv[]) { char src[20] = {0}; char dest[20] = {0}; int i; for(i

int main(int argc,char* argv[]) 简单理解

(1)第一个int代表整个main函数的返回值,若函数正常执行完毕,返回0,异常返回则是-1 (2)int argc代表命令行参数的总个数,既然是个数,那就是整型的,即:int; (3)char* argc代表程序在linux终端下参数的赋值,传入的参数会保存到argc[]的字符数组中; (4)传值时,不同的参数之间以空格分开(这是规则): (5)传值时,第一个参数赋给argv[1],传值时,第二个参数赋给argv[2],传值时,第三个参数赋给argv[3]......; (6)argv[0]代

int main(int argc,char* argv[])详解(转载)

argc是命令行总的参数个数     argv[]是argc个参数,其中第0个参数是程序的全名,以后的参数     命令行后面跟的用户输入的参数,比如:     int   main(int   argc,   char*   argv[])     {     int   i;     for   (i   =   0;   i<argc;   i++)     cout<<argv[i]<<endl;     cin>>i;     return   0;  

关于int main( int argc, char *argv[] )

int main(int argc, char *argv[], char *env[]) 1. int argc 表示你在命令行下输入命令的时候,一共有多少个参数. 2. char *argv[] 代表此可执行文件的存储路径,程序变量. 他的第一个元素即argv[0]为编译生成的可执行文件名(包括路径eg:"F:\VC\Ex1\Debug\Ex1.exe"),从二个元素(argv[1])开始,是每一个参数   int    argc    表示argv的大小,是实际参数个数+1,其中