2008年9月20日 星期六

C++中,char * 和char [] 的區別

我們在寫程式時,
如果宣告
char *c = "abc"
char c[]="abc"
前者改變其內容程式是會崩潰的,而後者完全正確。

存取效率的比較
char s1[]="aaaaaaaaaaaaaaa";
char *s2="bbbbbbbbbbbbbbb";
aaaaaaaaaaa是在運行時刻賦值的;
而bbbbbbbbbbb是在編譯時就確定的;

s1 會比 s2快

解說:
char *c = "abc";
實際上先是在文字常數區分配了一塊記憶體"abc",
並在stack分配位址給c並指向它,
改變常數"abc"自然會崩潰。

而char c[] = "abc";
實際上abc分配記憶體的地方和上者並不一樣
c位於stack指向常數區的"abc"

其他方法:char *c = ( char* )malloc(3);
如果直接指定值會出錯
//*c = "abc" //error
但可以用其他方式
strcpy(c,"abc");

0 留言:

張貼留言