在C Primer Plus中,它告诉我一些遵循的赋值规则:
一个指向整型数组的指针不能赋值给一个指向整型的指针。
int *pt; int a[3][2];
pt=a; /* invalid */
一个指向包含两个整数的数组的指针不能赋值给一个指向包含三个整数的数组的指针。
int (*pt)[3]; int a[3][2];
pt=a; /* invalid */
老实说,我对这个解释感到困惑。因为尽管上面的指针是指向不同对象的指针,在内存中,指针都以无符号十六进制地址存储,这意味着它们具有相同的存储形式。它们在8位(64位操作系统)或4位(32位操作系统)中都是统一的。那么为什么它们不能在根本原因上互相分配呢?因为编译器禁止这种赋值方式吗?