如何正确地将数组分配给结构,如何访问在C中分配给结构的数组?

问题描述 投票:1回答:2

对C还是个新手,目前正在尝试掌握它。

我的问题如下:

((1)以后如何在代码中访问分配给结构的数组?

(2)如何解决来自不兼容指针类型的分配错误?或者我该如何分配数组正确吗?

#include <stdio.h>

typedef struct Some_Array{
  int length;
  int *array:
} Some_Array;


Some_Array structure_arr(int *array, int length_a){
  Some_Array new_arr;
  new_arr.length = length_a;
  new_arr.array = &array; // Compiler gives warning: assignment from incompatible pointer type

  return new_arr;
}


int main(){

  int my_array = { 1, 2, 4, 6, 8};
  int my_array_length = 5;

  Some_Array fancy_arr = structure_arr(my_array, my_array_length);

  printf("\nLength is: %d", fancy_arr.length); // works
  printf("\n First index of fancy_arr:%d", fancy_arr.array[0]); // Doesnt work

  return 0;
}

c arrays pointers struct typedef
2个回答
0
投票

[就像David Ranieri在评论中说的那样,您正在传递一个指向该函数的int指针,因此在将其分配给该结构的int指针时,无需使用&。另外,在main中,当您调用structure_arr函数时,您需要传递&my_array,以便函数中相应的int指针指向数组起始地址。

解决这些问题将使您以后可以成功访问阵列,并且摆脱了编译器警告。


0
投票

由于数组已经是指向int的指针,所以请不要使用运算符的地址:

[new_arr.array = &array;应该是new_arr.array = array;

否则,将指针设置为指向int的指针(参数的地址而不是传递的数组的地址)

也解决错字:int *array:应该为int *array;

© www.soinside.com 2019 - 2024. All rights reserved.