考慮http://c-faq.com/misc/hexio.html的例子,有什麼理由有一個額外的指針'靜態'字符緩衝區?爲什麼我們不能逃脫retbuf
?爲什麼在函數中有一個'靜態'定義?
回答
您需要一個指針,以便您可以存儲更改的地址。如果你只有retbuf
,你將不得不設計這個函數來使用一個變化的索引變量。例如: -
int ind = sizeof(retbuf)-1;
retbuf[ind] = '\0';
等
注意數組不是指針。數組是固定大小的內存區域。指針是一個地址。
感謝您的輸入,但我仍然沒有完全理解。考慮以上代碼片段: static char retbuf [33]; char * p; p =&retbuf [sizeof(retbuf)-1]; 爲什麼我們需要保留額外的指針'p'到'retbuf'?如果我們填入'retbuf',然後從函數中返回('return retbuf'),它將始終指向緩衝區的第一個元素,我在這裏錯了嗎? – Mark 2011-01-12 23:56:09
@Mark,首先,`p`並不總是等於函數末尾的`retbuf`的第一個元素。作爲一個簡單的例子,如果`num`爲0,`p`將保持等於'retbuf + sizeof(retbuf) - 1`。其次,在函數中使用*來跟蹤要寫入哪個位置。 – 2011-01-13 00:07:25
如果沒有static
關鍵字,緩衝區將被分配到堆棧上 - 並在函數返回給調用者時釋放。使用static
確保緩衝區在函數返回後有效。
- 1. 爲什麼const在靜態函數中是未定義的?
- 2. 在OCaml中爲遞歸函數定義一個靜態變量
- 3. 如何在函數中定義一個類的靜態成員?
- 4. 爲什麼CanvasRenderingContext2D.createLinearGradient()不是靜態函數?
- 5. 爲什麼這個靜態函數沒有調試符號?
- 6. 爲什麼沒有定義函數javascript
- 7. 爲什麼在一個方法中看不到「私有靜態」?
- 8. 爲什麼靜態函數消除Xcode中未定義的符號?
- 9. 什麼存儲類是一個函數內部的靜態,爲什麼?
- 10. 爲什麼不在LinkedList中定義ListIterator的靜態類?
- 11. 在非靜態類中聲明一個靜態方法的意義是什麼?
- 12. 爲什麼靜態成員函數只能在類定義中聲明爲靜態而不是在其自己的定義中聲明?
- 13. 爲什麼屬性在函數中定義時未定義?
- 14. 爲什麼「this」在胖箭頭函數定義中未定義?
- 15. 爲什麼我的公共靜態數組未定義?
- 16. 這個定義爲什麼會返回一個函數?
- 17. 爲什麼main()函數沒有在if'__main__'中定義?
- 18. 爲什麼jsp中的EL函數必須聲明爲靜態?
- 19. PHP |爲什麼我應該使用公共靜態/私有靜態函數而不是公共/私有函數?
- 20. 爲什麼Java中沒有靜態類
- 21. 靜態成員函數和全局函數有什麼不同?
- 22. 爲什麼隨機變量的行爲在定義爲靜態或非靜態時有所不同?
- 23. 爲什麼我只能從靜態函數中訪問靜態成員?
- 24. 如何從另一個靜態函數調用靜態函數
- 25. Python 3 - 爲什麼這個變量沒有在這個函數中定義
- 26. Swift中靜態函數和非靜態之間有什麼區別?
- 27. C++:有沒有辦法定義一個靜態數組內聯?
- 28. 如何定義靜態成員函數?
- 29. 爲什麼私有靜態屬性爲
- 30. 爲什麼函數重定義比調用第一個更快?
你問我們爲什麼需要`static`關鍵字,或者爲什麼有一個'char * p'指針指向'retbuf`? – 2011-01-12 07:20:54