【发布时间】:2016-04-18 21:04:10
【问题描述】:
我编写了以下代码。
#include<stdio.h>
int main()
{
int x = 1 ;
int *j = &x ;
int y = 2 ;
int *t = &y ;
printf("%p\n" , (void *)j);
printf("%p" , (void *)t);
}
输出为0028FF14 0028FF10。
我想说的是地址之间的差异是'4'。
而在这种情况下
#include<stdio.h>
int main()
{
char x = 't' ;
char *j = &x ;
char y = 'f' ;
char *t = &y ;
printf("%p\n" , (void *)j);
printf("%p" , (void *)t);
}
输出为0028FF17 0028FF16
区别是1。
第一种情况的差异是4。而在第二种情况下,它是1。为什么会这样?
如果我在所有内存地址单独打印值,我会得到什么?
也许真的很笼统,众所周知,但是我刚开始C,所以程序的输出让我很困惑。
更新
现在使用 %p 格式并将指针值转换为 void* 以按照 Keith Thompson 的建议打印指针值。
【问题讨论】:
-
@SergeyK.: 不,我不认为这是重复的。没有指针被递增。代码只是检查声明对象的地址。
-
@SergeyK.:我不同意。对于
pointer ++,关系定义明确。两个单独定义的对象的地址之间没有定义的关系。char x;和char y;的地址很容易相差 4,例如 - 或 42。 -
@SergeyK.: 这是怎么复制的?在这个问题中没有使用
++或任何其他指针算法。 -
@SergeyK.:你已经说过了。我是说这个问题不是那个问题的重复。另一个问题是关于指针上的
++。这个没有;这根本与指针算术无关。 (关闭此问题可能还有其他原因,但不能重复有关++的问题。) -
嗯?你是说你问的问题和
++关于指针的问题一样吗?我真的不认为你是。
标签: c pointers allocation memory-address