【问题标题】:C Pointer error : cannot convert 'int (*)[10]' to 'int*' in initializationC 指针错误:无法在初始化中将 'int (*)[10]' 转换为 'int*'
【发布时间】:2021-12-15 00:31:31
【问题描述】:

我正在做以下代码。

    #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]

【问题讨论】:

  • 试试p = &amp;a[0];。真的是贴出来的真实代码吗?
  • 好的,程序正在运行。但是问题(无法在初始化中将 'int ()[10]' 转换为 'int')仍然显示在问题选项卡中。检查 imgur 图像。
  • 是的,这是真的。我对指针非常陌生,所以 IDK 有什么问题。程序正在运行,但仍然显示问题。
  • 在 imgur 图像中,代码文件被标记为已修改,即您没有保存文件内容。你确定你编译你看到的?
  • 代码已编译,但仍显示问题。可能是 IDK 错误。

标签: arrays c pointers compiler-errors implicit-conversion


【解决方案1】:

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

如果您希望p 指向a 的第一个元素,请更改:

int *p = a;

到:

int *p = &a[0]

【讨论】:

  • 好的,程序正在运行。但是问题(无法在初始化中将 'int ()[10]' 转换为 'int')仍然显示在问题选项卡中。检查 imgur 图像。
【解决方案2】:

错误信息

无法在初始化中将 'int ()[10]' 转换为 'int'

表示实际上不是这个正确的声明

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 是一维数组。

【讨论】:

  • 那有什么问题?
  • @Zeph_The_Hungry_Loli 表达式中使用的数组指示符(极少例外)被转换为指向其第一个元素的指针。因此,如果您有整数的一维数组,那么它将转换为 int * 类型的指针,如果您有像 int a[][10] 这样的二维数组,则其元素的类型为 int[10] 和指向该元素的指针看起来像 int (*p)[10]。看来你在某个地方打错了。例如,您可以调用 f( &a ); 之类的函数。而函数参数的类型为 int *
  • 所以数组指示符基本上是指向数组第一个元素的指针?假设 a[]={1,3,4,5}。因此,如果我只打印 a (不是 a[0] ),我会得到地址值还是第一个元素?还是我所说的完全错误?对不起,如果我听起来很愚蠢,但我对编码很陌生。
  • @Zeph_The_Hungry_Loli 你是对的。事实上,数组指示符隐式转换为指针会产生一个等价于表达式 &a[0] 的表达式。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-19
  • 1970-01-01
  • 2016-03-03
  • 2016-09-21
  • 1970-01-01
相关资源
最近更新 更多