在C中,指針包含另一個變量的內存位置。指針變量是存儲在堆棧上還是存儲在堆上?指針存儲在C中
指針存儲在C中
回答
指針只是一個變量。你可以把它作爲保留存儲位置的整數,所以如果你有:
int main(...) {
char *ptr = malloc(100);
...
}
然後ptr
是堆棧上的四個或八個字節的值,它包含分配的100字節的緩衝區的內存位置從堆。 內存本身在堆中,指針在堆棧上。
感謝您幫助我理解。你已經解釋清楚了。 – Angus
它存儲在某個地方!
這取決於你,你如何定義指針。
如果它是一個局部變量,它可能在堆棧或寄存器中。
如果你通過malloc()創建它,它就在堆上。
或全局,如果它在模塊範圍內定義。
int *pInt_global;
void foo(void)
{
int *pIntStack;
int **ppIntHeap;
ppIntHeap = malloc(sizeof(int *));
}
這取決於。堆內存是使用malloc創建的內存,堆棧內存是您不用malloc創建的內存(簡單來說,但我應該談論靜態內存)。
int a;
int* ps;
int* ph;
ps = &a;
ph = malloc(sizeof(int));
a = 5;
if (ph != NULL) {
*ph = 5;
}
這裏,ps包含堆棧(a)中變量的地址,ph包含堆中變量的地址。請注意,如果malloc沒有失敗,那麼都引用值5。另外請注意,分配給ph的內存應該在某些時候釋放,但不是ps中的內存!
如果您在函數中接收到某個指針,則無法知道它是從堆棧還是從堆中引用內存。
謝謝你幫助我理解。 – Angus
- 1. typedef將指針存儲在C中
- 2. 在Union(C)中存儲函數指針
- 3. 在NSButton中存儲指針
- 4. 在類中存儲指針
- 5. 在memcached中存儲指針
- 6. 存儲指針
- 7. 什麼是指針存儲在c
- 8. iOS存儲指針
- 9. 堆棧存儲結構指針c
- 10. 指針和用C存儲器混亂
- 11. 最好的C++存儲指針
- 12. 指針數組存儲字符串c
- 13. V8 C++ API存儲函數指針?
- 14. 在字符指針中存儲字符
- 15. 在OpenCV中存儲圖像和指針
- 16. 將指針或指針數組存儲在動態數組中
- 17. 將對象的指針直接存儲在指針向量中?
- 18. 指針的指針在存儲器中的大小
- 19. 在Raven中存儲具有父指針和子指針的樹
- 20. 在C++中存儲和檢索數組中的指針
- 21. 將對象作爲指針存儲在C++中的類中
- 22. C++存儲指向BST節點中的對象的指針
- 23. 存儲指針地址在malloced內存
- 24. 在C++中爲指針指定指針
- 25. 如何在C#中存儲函數指針
- 26. 在c函數指針中存儲額外的數據
- 27. 如何在一個動態雙指針中存儲一行C
- 28. C++多態性在一個向量中存儲基類指針
- 29. C++如何在對象指針向量中存儲信息?
- 30. 指向存儲在uint64_t中的內存位置的指針
可能是。 –
取決於你如何存儲指針^ – Bort
Angus,從內存的角度來看,一個指針是一個類似於彼此的變量,那麼它既可以存儲在堆中(如果分配或全局),也可以存儲在堆棧中(如果是本地)。 –