zoukankan      html  css  js  c++  java
  • const char *和 char *const以及 char const * 的区别

    #include <stdio.h>
    #include <stdlib.h>
    
    void parse_arg(const int argc, const char **argv, const char **src, char const **dest, int *num)
    {
        if(argc != 4){
            fprintf(stderr, "%s <number> <src_filename> <dest_filename>\n", argv[0]);
            exit(1);
        }
        
        *num = atoi(argv[1]);
        *src = argv[2];
        *dest = argv[3];
    }
    
    int main(const int argc, const char **argv)
    {
        const char *src;
        char const *dest;
        int num;
        parse_arg(argc, argv, &src, &dest, &num);
    
        printf("%d, %s, %s\n", num, src, dest);
        return 0;
    
    }
    

      

    最好把命令行参数的解析放在main函数之外,有利于程序逻辑的清晰;

    对命令行参数的数据要做到只读,这是很必要的;

    -----------------------------------------------

    const <type> 和<type> const 完全等价(这一点用objdump -dS 反汇编后, 用diff命令比较.s文件可知)

    这样一来本文讨论的问题就很清晰了,问题归结为 <type> const  *p 和  <type>* const p 区别;
    只需要看const 后是什么类型;
    前者const 修饰的是*p,他是p所指向的内容为read-only;
    而 后者 const 修饰的是p, 即指针变量p本身为 read-only;
     
    从内存的角度来看(本人已测试验证):
    <type> *const p   变量p存放在read-only数据段
      p为常量指针,p只用于读操作, 告诉编译器,p仅用做右值;
    const <type> *p   变量p存放在栈区;
       *p不一定为常量区,但*p只用于读操作,告诉编译器*p仅用作右值;
     
    -------------------------------------------------
     
     
  • 相关阅读:
    循序渐进做项目系列(3):迷你QQ篇(1)——实现客户端互相聊天
    清明时节欲断魂——未知死焉知生?——向死而生!
    curl基本使用
    some tools
    redis源码学习
    设计模式
    object-c基础
    python库
    awk命令
    gcc编译
  • 原文地址:https://www.cnblogs.com/mathzzz/p/2687783.html
Copyright © 2011-2022 走看看