在学习apue的11.5 Threads时,有一个实例代码,其中有一个打印地址fp的语句printf(" structure at 0x%lx\n", (unsigned long)fp);为什么要将指针变量fp强制转换为unsigned long再打印呢,(为了兼容unix的各种分支平台)以前学习c语言的经验是指针变量占用空间大小是4个字节,查阅资料后发现:
void
printfoo(const char *s, const struct foo *fp)
{
printf("%s", s);
printf(" structure at 0x%lx\n", (unsigned long)fp);
printf(" foo.a = %d\n", fp->a);
printf(" foo.b = %d\n", fp->b);
printf(" foo.c = %d\n", fp->c);
printf(" foo.d = %d\n", fp->d);
}
指针的空间大小没有固定的值,它取决于体系结构、编译器实现、指针的类型(指向不同类型变量的指针不一定有相同的空间大小或表示方法)
例如,假设有一个word-addressed architecture,where最小的存储地址单元是16位,每一个字可以存储多个char类型的变量,所有其他类型占据一整个字或者多个字,在这样的体系