簡體   English   中英

C內存堆棧和堆

[英]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); ,則增量前后的值將相同。

  1. 圖5是的值a&a是的地址a

  2. ptr = &a的裝置地址a等於的值ptr

  3. &ptr是地址ptr

您可以將ptr視為可以容納地址值的盒子。

當增加ptr您將更改框內的地址,即ptr 不是盒子本身的地址。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM