我在做一个指针练习,在试验代码时遇到了一个疑问。为什么数组中的这些内存地址会增加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/