今天被指針與數組的區別搞暈了。初學者的羈絆。
網上查找了一下,下面總結下
char *p="abcd";//
上面這種定義法,實質上爲const char *p="abcd";
就是“abcd”的空間在編譯期,已經分配了空間,所以其值是不允許改變的,改變時,編譯不報錯,但運行時報錯。但指針p還是可以指向其他地方。
char arr[]="abcd";
這種定義法,可以認爲是char const arr="abcd",“abcd”的空間是運行時才分配的,所以“abcd”的值是可以改變的。而arr是可讀而不可寫的。
作爲函數參數傳遞時,
數組在作爲函數參數時,數組名將蛻化爲指針。C語言的書上是這麼說的,我這裏要說得是:這句話是不完全正確的!我們知道指針是佔用內存的,但是這個蛻化而成的傢伙是不佔有內存的,仍然只是個標籤。書上爲什麼這麼說呢?書上的意思是說這傢伙已經蛻化得不知道自己有幾個元素了。
同樣,也要遵從上面的定義規則。
補充一下:
*c++ :先*c 再c++
(*c)++ :先(*c) 再(*c)自增
*++c :先++c 再*(c)
char (*p)[5] 數組指針
char *p[5] 指針數組
參考:http://www.cppblog.com/geforcex/articles/1861.html
http://blog.sina.com.cn/s/blog_5e8a99570100ceqv.html