我对下面代码中的第 6、7 和 8 行感兴趣。
#include <stdio.h>
#include <stdlib.h>
void go_south_east(int *lat, int *lon) {
printf("Lat: %p, Long: %p\n", lat, lon);
printf("Address of Lat: %p, Address of Long: %p\n", &lat, &lon);
printf("Address of Lat: %p, Address of Long + 8 bytes?: %p\n", &lat, &lon+8);
printf("Size of Lat: %lu, Size of Long: %lu\n", sizeof(lat), sizeof(lon));
*lat -= 1;
*lon += 1;
}
int main() {
int latitude = 32;
int longtitude = -64;
go_south_east(&latitude, &longtitude);
printf("Avast! Now at: [%i, %i]\n", latitude, longtitude);
return 0;
}
我得到的输出是:
Address of Lat: 0x7fff5fbfe9e8, Address of Long: 0x7fff5fbfe9e0
Address of Lat: 0x7fff5fbfe9e8, Address of Long + 8 bytes?: 0x7fff5fbfea20
Size of Lat: 8, Size of Long: 8
我知道 lat 和 long 指针的大小是 8 个字节,因为它们是 long unsigned int。但是为什么它们在内存中只相距 1 个字节呢?由于它们的大小是 8 个字节,它们不应该彼此相距 8 个字节吗?请指教。
感谢所有有用的建议。我希望我可以将每个人的答案都标记为答案,但我不能。真的很感激。