**:
主要解析的問題:
問題1:
#include "stdio.h"
char *get_string_1()
char *get_string_2()
int main()
輸出:get_string_1:(亂碼或者沒有輸出),linux下沒有任何輸出
get_string_2:hello world!
為什麼會這樣?
問題2:
char *p = "hello world!";這樣寫到底合不合法,實際應用中能不能這樣寫。
問題3:
char *p = "hello world!";與char p="hello world!";有什麼細節和操作上
的差異。
解析:char *p = "hello world!";與char p = "hello world!"; 兩者都用
來宣告乙個字串,並將其初始化為hello world!,但是表示的意義確是大不相
同。從其宣告的物件來說:
char p = "hello world!";用來宣告乙個陣列p,陣列大小為12位元組。
char *p = "hello world!";用來宣告乙個指標p,指向「hello world!
」字串起始位置。
從儲存位置來說:
char p = "hello world!";p陣列作為區域性變數被儲存在棧區;
char *p = "hello world!"; 在這個宣告中,"hello world!"被儲存在
靜態資料區(有記述**段的,待定??) ,而且是全域性的,p僅僅就是個指標,指向這個區域。不信的話你可
第乙個問題也就不難解釋了,get_string_1()函式執行完就釋放了棧區記憶體,所
以根本就不存在存有"hello world!"宣告時的記憶體,也就不可能有所輸出。
那麼,寫成char *p = "hello world!";到底合不合法呢?能不能這樣
寫呢?這是乙個歷史問題,在const關鍵字被引入c語言之前,這樣寫是合法的
,而且存在了很長的一段時間,大量的**在此期間運用了這種寫法,新版c語
言為了相容,故允許這樣寫,但最好不要這樣,因為這種寫法終會被淘汰,說不
定哪天你的**用了新版的編譯器,然後莫名的出了問題,要找這個bug估計不
是一件容易的事。現在最好寫成:
const char *p = "hello world!";
或者char p = "hello world!";
那他們在操作和細節上有什麼區別呢?
區別很多,由於本人才疏學淺,只總結出以下幾點,忘有知者補充:
1. char *p = "hello world!"; 可以用p++操作,sizeof(p) == 4;
2.char p="hello world!"; sizeof(p) == 12;
解析char p與char p 區別
主要解析的問題 問題1 include stdio.h char get string 1 char get string 2 int main 輸出 get string 1 亂碼或者沒有輸出 linux下沒有任何輸出 get string 2 hello world 為什麼會這樣?問題2 cha...
char p 和 char p 區別及應用
p的含義是指向常量字元的指標 char p hello 等價於const char p hello 常量字元 說明hello這個字串是無法改變的,則不能更改指標指向的內容,來改變字串hello。p 2 w 錯誤 指向的指標 是可以改變自身的值,輸出p的時候就不是hello了而是別的字串 p news...
char p和char p 的問題
這個問題,平常也經常碰到,今天寫程式的時候又遇到,還是應該總結一下。先貼 1 include 2 char mystrcpy char dest,const char src 3 9 char temp dest 10 while src 0 11 16 temp 0 17 return dest ...