C Pointer error : cannot convert 'int (*)[10]' to 'int*' in initialization

C Pointer error : cannot convert 'int (*)[10]' to 'int*' in initialization

我正在执行以下代码。

    #include <stdio.h>
    int main()
   {
    int a[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
    int *p =a;

    }

但是我的控制台显示这个错误。

cannot convert 'int (*)[10]' to 'int*' in initialization

我不知道为什么。谁能告诉我原因和解决方案?

这是包含的屏幕截图。[https://imgur.com/a/U94vtKG]

a 是 10 int 个指针。您不能将一个 int 指针分配给 10 个 int 指针。

如果你想让p指向[=12=的第一个元素],更改:

int *p = a;

至:

int *p = &a[0]

错误信息

cannot convert 'int ()[10]' to 'int' in initialization

意味着实际上而不是这个正确的声明

int *p = a;

你写了

int *p = &a;

或者如果实际上数组 a 被声明为二维数组

int a[][10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};

那么你需要写

int ( *p )[10] = a;

那是你在问题中给出的代码与错误信息不对应。

通常这样的错误发生在函数声明为例如

void f( int *a );

被称为

f( &a );

而不是像

那样称呼它
f( a );

其中 a 是一维数组。