- 什麼是在具有ptrTemp指向它還有點,如何利用兩者兼而有之?
這與鏈接列表中的「頭」指針是一樣的想法。
ptrTemp = ptrMem; // here both pointers point to the start
// of your shared memory location
當你通過你循環運行,你一次又一次地執行此:
*ptrTemp++ = x;
現在ptrTemp
不指向您的共享存儲位置的開始了。在這個特定的例子中,你知道你循環了24次(你的指針增加了24個增量),所以你可以使用指針算術和「退後」地址,但爲什麼要麻煩?對於一些額外的字節,你可以使用一個新的指針,並且總是有一個方便的引用來指出緩衝區的開始,這很可能需要被傳遞/引用。
請記住名稱ptrTemp
的名稱中含有「Temp」,表示它是用於某種臨時存儲。
編輯:的*
操作者是取消引用指針(或聲明它本身)。因此,在你的代碼:
ptrTemp = ptrMem; // Assigning one pointer to another, no need for the * here since
// they are both pointers.
*ptrTemp++ = x; // here you are assigning a value to the memory pointed to by ptrTemp
// to assign a value you need to dereference, then we increment ptrTemp
- ,如果我想打印內存不足,我必須做的; ptrTemp = ptrMem,對嗎?
不是真的,那只是將temp指針設置回共享內存緩衝區的開始位置。如果你想打印內容內存出來,你可以簡單地做:
for(nCount = 0; nCount < 24; nCount++)
printf("%p: %d\n", ptrMem+nCount, *(ptrMem+nCount));
這不會改變什麼ptrMem指向了(因爲我們從來沒有覆蓋它),我們想知道的內存地址(我們打印一個"%p"
(指針格式字符串)和一個"%d"
(int格式字符串)
你用來處理分配的內存,其他的你保留記住以後可以免費使用的內存(ptrMem + nCount)具有什麼值(解除引用的版本)你的代碼。 – 2013-04-11 15:08:36
取決於代碼的其餘部分,例如你可以增加一個來通過內存 – Mark 2013-04-11 15:09:00
有很多原因可以做到這一點。你可以添加更多信息嗎? – 2013-04-11 15:09:22