#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僅用作右值;
-------------------------------------------------