C 指针和数组赋值

C 指针和数组赋值,c,arrays,pointers,C,Arrays,Pointers,int-val=7 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] 请有人告诉我它们之间的区别是什么

int-val=7

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]

请有人告诉我它们之间的区别是什么?

警告是因为指向长度为1的int数组的指针类型与长度为5的int数组的类型不匹配。您需要

int (*ptr)[5]=&val;

第一个示例中没有警告,因为初始化左侧的指针类型与右侧的指针类型匹配。

我认为'int*ptr[5]=&val;'这是不正确的,因为它几乎是说声明一个包含5个指向int的指针的数组,然后将“ptr[]”数组中难以确定的条目设置为“val”的地址,可能您的意思是:“int*ptr[5];ptr[0]=&val;'@用户3629249不,我是说我写的。int*ptr[5]是指向由5个int组成的数组的指针。@user3629249这里是。@user3629249:上面的代码相当于int*ptr[5];ptr=&val;。ptr是一个指向int的5元素数组的指针,int*ptr[5]声明了一个指向int的指针的5元素数组,这是一个完全不同的东西,而不是我们想要的。@user3629249你如何质疑一个145k用户对一个小问题的答案,真是可爱。傲慢是不好的!
int (*ptr)[5]=&val;