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仅用作右值;
 
-------------------------------------------------
 
 
posted @ 2012-09-16 20:05  庄庄庄  阅读(3598)  评论(0编辑  收藏  举报