我在嵌入式C中使用的代碼存在問題。如果我將p作爲某些函數的參數傳遞,但在「p」爲本地的情況下不起作用,則它工作正常。請幫助詳細瞭解此代碼的工作原理。這個char拷貝如何工作:*(*((char **)p))++ = ch;在c
-2
A
回答
2
指針p被澆鑄到char **和解除引用兩次,CH被複制到該位置,然後*p
遞增(點到下一個字符。
我想象(因爲沒有代碼,所有我可以做)不工作的「p
的情況下是本地的」與p
是無關的,與p的值和所涉及的代碼的上下文語義有關。所有代碼是否工作都取決於p
保持一個有效的值,使得雙解參考解析爲預期的位置。
說實話wever,你應該避免編寫這樣的代碼,它太「聰明」,並作爲Brian Kernighan說:
大家都知道,調試是加倍努力在首位寫一個程序。所以,如果你寫的時候你的聰明才智,你將如何進行調試?
0
P是字符指針pointer.Initially它被強制轉換爲char**
和解除引用2和times.After提領2倍,在這個地方ch
是copied.After它被遞增by1.Here,瞭解關於遞增這樣的指針,試圖理解如下。 *p++
等於*p
和p++
,不等於*p
和(*p)++
。像這樣,你的指針也增加了。您的複製語句中有機會出現分段錯誤。
相關問題
- 1. 深拷貝std :: string :: c_str()char *
- 2. 拷貝數組的char *破壞數據
- 3. 什麼char ch ='Z'會存儲在ch?
- 4. 拷貝載體的價值觀爲char *
- 5. char * argv []如何在c/C++中工作?
- 6. 什麼是合理的使用char * ch與char * ch
- 7. char ch [] =「一些字符串」;
- 8. 這個功能是如何工作的? char * getname(); C++
- 9. C++拷貝std :: string到沒有空終止的char數組
- 10. 如何將`char *`深層拷貝到std :: stringstream?
- 11. C++中char * p和const char * p有什麼區別?
- 12. Char * p和scanf
- 13. 這個數組的拷貝是如何工作的?
- 14. 複製std :: string :: insert(int pos,char ch)
- 15. Char到char * C++
- 16. C++ char const char *
- 17. 拷貝char *數組在本地變量中
- 18. 如何從c中的char *訪問char []?
- 19. 淺拷貝和深拷貝在C
- 20. 我的函數應該拷貝`char *` - 參數嗎?
- 21. 對於帶有char []的結構,淺拷貝是否足夠?
- 22. Atoi(char * p)函數
- 23. 動態內存拷貝如何工作?
- 24. 如何將System :: Char轉換爲C++ char
- 25. C char在if..else中不工作
- 26. svn工作拷貝問題
- 27. 何時使用char a []通過char p *,反之亦然?
- 28. 在c#中有沒有像java的Character.digit(char ch,int radix)?
- 29. 這個Char陣列應該如何? (A遊對於C++例如)
- 30. 這個操作在C++中做了什麼:char c&= 0x5F?
請張貼一段代碼。解釋你對它的期望,以及發生了什麼。 – folkol 2014-08-31 12:08:53