int val = 7;
int *ptr = &val;
val是int类型的变量,ptr是指向int 的指针 所以上面的赋值是正确的,编译器没有警告。
int val[5] = {5, 3, 2, 33,557};
int (*ptr)[1]=&val;
val是一个整数数组,ptr是一个指向int 数组的指针 运行时编译器给我一个警告:
warning: initialization from incompatible pointer type [enabled by default]
请有人解释一下他们之间的区别是什么?
答案 0 :(得分:2)
警告是因为指针的类型(指向int
的长度为1的数组的指针)与数组的类型不匹配,长度为5 int
的数组。你需要
int (*ptr)[5]=&val;
第一个例子中没有警告,因为初始化LHS上的指针类型与RHS上指针的类型相匹配。