乙個指標函式的問題

2021-06-24 11:09:30 字數 1077 閱讀 2388

看到乙個某公司的面試題目如下:

char *getstr1(void) 

char *getstr2(void)

問如果呼叫這兩個函式進行賦值的話,輸出的值分別為什麼?

如果不仔細想的話,回答是輸入的結果一樣:hello world!

然而非也,實驗證明以上的答案是錯的

函式getstr1返回值為輸出的亂碼,函式getstr2為hello world.

說明如下:

"hello world"作為靜態字串實際上儲存在資料區,但寫程式的人不知道這個位址,而程式本身知道。當某一函式以

方式使用此靜態字串時,實際上相當於:

char p[12];

strcpy(p, "hello world");

....

p[12]是在棧裡臨時分配的。雖然p指向的內容是"hello world", 但是這是複製品,不是原件。當函式結束,char p就被程式**了,所以p的內容就不再是"hello world"了。

但如果以char *p="hello world"的方式使用,p指向的是靜態字串儲存的位置,也就是說指向"hello world"的原件,當然沒有問題了。

如果想堅持用char p而不使用char *p, 有效方法必須是:

原因我想很清楚了。static char 是靜態的,儲存在資料區。

以上就涉及到了函式指標,在實現的程式設計當中也會經常使用的,如下

如果需要實現乙個字串的反轉函式,就可以用以下的**來實現

/*

*function: 實現對乙個字串的反轉

*/char *strrevse(char *value)

else

dest = (char *)malloc(len);

pdest = dest;

psrc = src+len-1;

while(*psrc != 0)

return dest;

}

測試函式

int main(void)

乙個有趣的指標問題

是從網上看到的乙個例子 struct s int i int p void main struct s s int p s.i p 0 4 p 1 3 s.p p s.p 1 1 s.p 0 2 問程式會在哪一行死掉 解答 程式執行到最後一行就會報出異常,死掉.具體解答為 首先需要說明的是結構體s,...

關於指標的乙個小問題

任務 c primer 4th 習題5.18 編寫程式定義乙個vector物件,其每個元素都是指向string型別的指標,讀取該vector物件,輸出每個string的內容及其相應的長度。自己的方法 string s string sarr 10 vector內的每個元素都是指向string型別的指...

乙個函式過載問題

今天下午在看c primer plus時遇到乙個疑問 請教個問題,乙個類的2個類方法宣告為 為什麼沒有產生重定義錯誤?double operator int i double operator int i const 比如class student student ada 3 ada 1 ada 3...