结构函数的传递和返回

时间:2018-11-29 13:34:36

标签: c function struct

有人可以帮我编码此aadjacentElementsProduct函数的主要功能吗? 问题是:

这是我尝试过的:

struct arr_integer
{
  int size;
 int arr[];
};
int adjacentElementsProduct(struct arr_integer inputArray);
int main()
{
  int res,i;
  struct arr_integer array;
  printf("Enter size of the array: ");
  scanf("%d", &array.size);
  printf("Enter the elements in array: ");
  for (i = 0; i < array.size; i++)
  {
        scanf("%d", &array.arr[i]);
  }
      printf("%d\n", array.arr[2]); 
 res = adjacentElementsProduct(array);
 printf("Max is %d", res);
 getch();

 }

给出一个整数数组,找到具有最大乘积的相邻元素对并返回该乘积。

示例

对于inputArray = [3, 6, -2, -5, 7, 3],,输出应为adjacentElementsProduct(inputArray) = 21

73产生最大的产品。

int adjacentElementsProduct(struct arr_integer inputArray)
{
    int arrLength = inputArray.size;
    int max = inputArray.arr[0] * inputArray.arr[1];

    for (int i = 1; i < arrLength - 1; i++)
    {
        if (inputArray.arr[i] * inputArray.arr[i + 1] > max)
        {
            max = inputArray.arr[i] * inputArray.arr[i + 1];
        }
    }
    return max;
}

4 个答案:

答案 0 :(得分:1)

结构成员arrflexible array member。默认情况下,它没有大小,甚至没有为其分配内存,需要对其进行分配。这只能通过动态分配整个结构 (例如使用malloc)来实现。

所以解决方案就像

struct arr_integer *array;
size_t array_size;

// Get the number of elements for the array
printf("Enter size of the array: ");
scanf("%zd", &array_size);

// Allocate memory for both the structure and the array data
array = malloc(sizeof *array + sizeof *array->arr * array_size);
array->size = array_size;

// Now you can initialize `array->arr[i]` for any `i` between `0` and `array->size - 1`

答案 1 :(得分:0)

@Muneer。您只需要按照以下步骤重新调整 for循环

int adjacentElementsProduct(struct arr_integer inputArray)
{
    int arrLength = inputArray.size;
    int max = inputArray.arr[0] * inputArray.arr[1];

    for (int i = 2; i < arrLength - 1; i++)
    {
        if (inputArray.arr[i-1] * inputArray.arr[i] > max)
        {
            max = inputArray.arr[i-1] * inputArray.arr[i];
        }
    }

    return max;
}

注意循环中 i 的第一个值( i = 2

答案 2 :(得分:0)

问题是您没有分配任何内存。最后使用[]语法的结构称为“弹性数组成员”。仅当您为结构手动分配内存时才能使用它,如下所示:

#include <stdlib.h>

...

printf("Enter size of the array: ");
int size;
scanf("%d", &size);

struct arr_integer* array = malloc( sizeof(*array) + sizeof(int[size]) );
array->size = size;

printf("Enter the elements in array: ");
for (i = 0; i < array.size; i++)
{
    scanf("%d", &array.arr[i]);
}

...
free(array);

答案 3 :(得分:0)

虽然有关丢失内存分配的答案是正确的,但我认为这样更改将更容易:

struct arr_integer
{
  int size;
  int *arr; //<<<<<<<<<<
};

int adjacentElementsProduct(struct arr_integer inputArray);

int main()
{
  int res,i;
  struct arr_integer array;
  printf("Enter size of the array: ");
  scanf("%d", &array.size);
  //Of course add check for return value of scanf and to
  // the validity of the size
  array.arr = malloc(array.size * sizeof(*array.arr));
  //and check the malloc return
  //and later free the allocated memory!

.
.
.

这允许OP仍使用“常规”语法声明结构,并仅分配动态部分。我认为它更具可读性。