char *a 与char a[] 的区别
char *a = "hello" 中的a是指向第一個(gè)字符‘a(chǎn)'的一個(gè)指針
char a[20] = "hello" 中數(shù)組名a也是執(zhí)行數(shù)組第一個(gè)字符‘h’的指針
但二者并不相同:
看實(shí)例:把兩個(gè)字符串相加:
結(jié)果:
對(duì)比:
結(jié)果:
把字符串加到指針?biāo)傅淖执先?#xff0c;出現(xiàn)段錯(cuò)誤,本質(zhì)原因:*d="0123456789"存放在常量區(qū),是無(wú)法修的。而數(shù)組是存放在棧中,是可以修改的。兩者區(qū)別如下:
一. ”讀“ ”寫“ 能力
- char *a = "abcd"; ?此時(shí)"abcd"存放在常量區(qū)。通過指針只可以訪問字符串常量,而不可以改變它。
- 而char a[20] = "abcd"; 此時(shí)?"abcd"存放在棧。可以通過指針去訪問和修改數(shù)組內(nèi)容。
二. 賦值時(shí)刻
- char *a = "abcd"; 是在編譯時(shí)就確定了(因?yàn)闉槌A?#xff09;。
- 而char a[20] = "abcd"; 在運(yùn)行時(shí)確定
三. 存取效率
- char *a = "abcd"; 存于靜態(tài)存儲(chǔ)區(qū)。在棧上的數(shù)組比指針?biāo)赶蜃址臁R虼寺?/li>
- 而char a[20] = "abcd";?存于棧上。快
另外注意:
char a[] = "01234",雖然沒有指明字符串的長(zhǎng)度,但是此時(shí)系統(tǒng)已經(jīng)開好了,就是大小為6-----'0' '1' '2' '3' '4' '5' '\0',(注意strlen(a)是不計(jì)‘\0’)
看一結(jié)構(gòu)中出現(xiàn)的同樣的問題:
這樣紅色部分在調(diào)用Init函數(shù)時(shí)會(huì)出現(xiàn)“Segment Default", 因?yàn)榇藭r(shí) 指針n是靜態(tài)的,只有“讀”的本事,不可以改變。
?
內(nèi)存分配方式
內(nèi)存分配有三種:靜態(tài)存儲(chǔ)區(qū)、堆區(qū)和棧區(qū)。他們的功能不同,對(duì)他們使用方式也就不同。
轉(zhuǎn)載于:https://www.cnblogs.com/kaituorensheng/archive/2012/10/23/2736069.html
總結(jié)
以上是生活随笔為你收集整理的char *a 与char a[] 的区别的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 红薯除草剂八喜夫的用法用量?
- 下一篇: 扫盲行动之九:Vi编辑器的基本使用方法!