编译器显示错误消息“使指针从整数生成而不进行强制转换”(反转数组)。我该如何解决?

时间:2019-12-13 17:06:39

标签: c++ c arrays pointers

代码如下。调用函数reverse_array时,如何将第一个函数参数定义为数组?

#include <stdio.h>

void swap(int* a, int* b);
void reverse_array(int a[], int n) {
  int* b = a + n - 1;
  while (b > a) {
    swap(a, b);
    a = a + 1;
    b = b - 1;
  }
}

void swap(int* ptra, int* ptrb) {
  int t;
  t = *ptra;
  *ptra = *ptrb;
  *ptrb = t;
}

main() {
  int b[5] = { 1,2,3,4,5 };
  reverse_array(b[5], 5);
  int x;
  for (x = 0; x < 5; x++) {
    printf("%d", b[x]);
  }
}

3 个答案:

答案 0 :(得分:1)

b[5]不是整个数组,而是数组的第6个元素(索引从0开始),该元素不存在。

您应该改为传递b。它将被转换为指向数组第一个元素的指针。

答案 1 :(得分:1)

  

编译器显示错误消息“使指针从整数生成而不进行强制转换”(反转数组)。我该如何解决?

请勿将int传递到期望指针的位置。 :)

背景:

在函数定义的上下文中,类似int a[]int * a相同,因此a是指向int的指针。

您的呼叫者传递了b[5],它是int数组b的第六个元素,因此它是int(并且顺便说一句,是越界访问,就像在C数组中基于0一样,因此b的元素通过范围从0到4的索引来寻址。

要“传递”数组,只需给出b

  reverse_array(b, 5);

然后将数组b衰减到其第一个元素的地址。此地址在函数中作为值a接收。

答案 2 :(得分:1)

  

写作时

`reverse_array(b[5], 5)`, 
  

您要将int作为第一个参数而不是第一个参数传递给函数   整数数组。