Я только что попробовал ваш код на моем компьютере (под управлением 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. Может быть, вы неверно истолковали свои результаты?