zoukankan      html  css  js  c++  java
  • int main(int argc, char *argv[])的解读

    一、参数的含义

    1、int argc:用来统计程序运行时发送给main函数的命令行参数的个数(在VS中默认值为1)。

    2、char *argv[]:字符串数组,用来存放指向的字符串参数的指针数组,每个元素指向一个参数。

          argv[0]:指向程序运行的全路径名;

          argv[1]:指向在DOS命令行中执行程序名后的第一个字符串;

          argv[2]:指向执行程序名后的第二个字符串;

          argv[argc]:为NULL;

    二、参数:char *argv[] 和参数:char **argv 的区别

     这两个参数都可以使用。

    int main(int argc, char **argv)

    1、char *argv[]

    由于 [] 比 * 的运算等级高,所以argv是一个数组:argv[],然后它的元素类型为:char *;因此argv是一个元素为char * 型的数组。

    2、char *s和char str[]的区别

    C语言中没有真正的字符串类型,可以通过字符数组表示字符串,因为数组的元素地址是连续的。C语言中规定数组名代表数组所在内存中的首地址。也就是str[0]的地址。字符串常量的本质表示是一个地址。

    s指针是char类型的,也可以保存字符串的地址(首地址),即第一个字符的地址,这个地址单元中的数据是一个字符,这也与s所指向的char一致。因此:s = a。

    本质区别为:当定义char a[10]时,编译器会给数组分配十个单元内存,每个单元的数据类型为字符;而定义char *s 时,是个指针变量,只占四个字节,32位(或64位,根据系统的位数来定),用来保存一个地址。

    C语言中操作字符串是通过它在内存中的存储单元的首地址进行的,这是字符串的终极本质。

    3、char *argv[] 和 char **argv的区别

    假设如下所示:

    char **p = NULL;
    
    char *argv[] = {"abcd", "aaaa", "bbbb", "cccc"};
    
    p = argv;

    p[0]和p[1]之间相差sizeof(p)个地址。是按照一个单位指针的长度进行累加的。由于数组argv元素地址也是按照单位指针长度累加的,因此可以通过p来进行访问argv元素。可以通过以下例子验证:

    #include <stdio.h>
    #include <stdlib.h>
    
    int main(int argc, char **argv)
    {
        char **p = NULL;
        char *a[] = {"abcd", "aaaa", "bbbb", "cccc"};
    
        p = a;
    
        printf("%ld
    ", sizeof(p));
        printf("address: %p value: %s
    ", &p[0], p[0]);
        printf("address: %p value: %s
    ", &p[1], p[1]);
        printf("address: %p value: %s
    ", &a[0], a[0]);
        printf("address: %p value: %s
    ", &a[1], a[1]);
    }
    结果为:
    ljs@ljs-PC:~/tcpip/10$ gcc wait.c -o wait
    ljs@ljs-PC:~/tcpip/10$ ./wait
    8
    address: 0x7ffcbc32fb80 value: abcd
    address: 0x7ffcbc32fb88 value: aaaa
    address: 0x7ffcbc32fb80 value: abcd
    address: 0x7ffcbc32fb88 value: aaaa
    以上内容仅代表个人理解,如有不适之处,还望不吝赐教!
  • 相关阅读:
    省市区distpicker,从数据库里查出来回显,动态绑定
    ajax请求里面的success和error里面的layer.msg,status: "parsererror",刷新父界面,碰到的一些问题
    排序算法时间和空间算法度
    适配器模式
    守护线程
    工厂模式之简单工厂模式、工厂模式、抽象工厂
    ArrayList源码分析和缩减版手写ArrayList(jdk1.8和1.9)
    HashMap排序题
    二进制中1的个数
    anaconda指定镜像源,解决conda下载速度慢失败问题
  • 原文地址:https://www.cnblogs.com/wojiaowoen/p/8085570.html
Copyright © 2011-2022 走看看