void main(){
    int i,k;
    char* p;
    int j;
    printf("address of i is %d \naddress of k is %d \naddress of p is %p\naddress of j is %d", &i,&k,&p,&j);
}
当我尝试上面的代码时,j的地址比k低4个单位.但是p的地址不在附近.由于指针是一个可以存储4个字节数据的整数变量,为什么不像其他三个变量一样在堆栈上分配?
我刚刚在我的计算机上运行了你的代码(运行Ubuntu 9.04)并获得了以下内容:
address of i is 0xbf96fe30
address of k is 0xbf96fe2c
address of p is 0xbf96fe28
address of j is 0xbf96fe24
稍微更改代码后:
void main(){
    int i,k;
    char* p;
    int j;
    printf("address of i is %p \naddress of k is %p \naddress of p is %p\naddress of j is %p\n", &i,&k,&p,&j);
}
由于你所有的printf()都是地址,你应该使用%p而不是%d.也许你误解了你的结果?