如果宣告
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 留言:
張貼留言