[英]C memory stack and heap
#include <stdio.h>
#include <stdlib.h>
int main (void) {
int a = 5, *ptr;
ptr = &a;
printf("0x%X\n", ptr);
printf("%p\n", &ptr); //Why are these the same?
printf("%d\n", *ptr);
ptr++;
printf("0x%X\n", ptr);
printf("%p\n", &ptr); //Why are these the same?
printf("%d\n", *ptr);
return 0;
}
為什么這兩個值相同? 由於我增加了指針,地址也不應更改嗎?
您增加了ptr
的值。 它仍然位於內存中的同一位置。 &ptr
告訴您其地址。 這與做類似a++
事情沒有什么不同。 如果您打印出a
的值,則現在為6,但是如果您使用printf("%p\\n", (void*)&a);
打印出a
的地址printf("%p\\n", (void*)&a);
,則增量前后的值將相同。
圖5是的值a
和&a
是的地址a
。
ptr = &a
的裝置地址a
等於的值ptr
。
&ptr
是地址ptr
。
您可以將ptr
視為可以容納地址值的盒子。
當增加ptr
您將更改框內的地址,即ptr
; 不是盒子本身的地址。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.