c - 内存地址增加四

标签 c arrays pointers allocation memory-address

我在做一个指针练习,在试验代码时遇到了一个疑问。为什么数组中的这些内存地址会增加4?

例如我的输出是

Value of var[0] = 2686720

Value of var[1] = 2686724

Value of var[2] = 2686728

代码如下:

#include <stdio.h>
#include <conio.h>
main ()
{
  int var[3]= {10,100,200};
  int *ptr[3],i;

  for (i = 0; i < 3; i++)
  {
    ptr[i] = &var[i]; // assign the address of integer.
  }
  for (i = 0; i < 3; i++)
  {
    printf("\n\nValue of var[%d] = ",i);
    printf("%d",ptr[i]);               //var[0]=10  var[1]=100   var[2]=200
  }
  getch();
  return 0;
}

最佳答案

首先var[i]int类型的数组。因此,该数组的每个元素都将占用一个 int 的大小。 int 的大小是 4 字节。

接下来,您将使用ptr[i] 来保存var 数组元素的地址。因此,对于每个元素,ptr [i]value 增加4

在这里,为了更好地理解,您应该在 printf() 中使用 "%p""0x%x" 格式说明符处理指针。

此外,您应该更改打印语句

printf("\n\nValue of var[%d] = ",i);

printf("\n\nAddress of var[%d] = ",i);

因为前者传达了错误的信息。实际上输出值是var[i]地址。如果要使用ptr[i]打印var[i]的值,可以考虑使用*ptr[i]

关于c - 内存地址增加四,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20968560/

相关文章:

c - 如何在不知道数组大小的情况下使用指针循环遍历数组

C程序没有进入for循环,而是递增循环索引变量?

c++ - 函数参数声明中的静态数组索引

arrays - 用于存储不同大小数据集的数据库表设计

javascript - 更改对象(如果存在)

c++ - 为什么 sizeof(argv)/sizeof(argv[0]) 给我 C++ 中数组的大小?

c++ - 通过平移放大鼠标位置?

c - 从 sqlite 中检索字符串形式的数字并转换为 int

ios - Objective-c 以正确的顺序使用字母数字字符串对 NSArray 进行排序

c - 2[p] 和 6[p] 是什么意思?