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仅用作右值;
-------------------------------------------------
浙公网安备 33010602011771号