对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;
}
[就像David Ranieri在评论中说的那样,您正在传递一个指向该函数的int指针,因此在将其分配给该结构的int指针时,无需使用&。另外,在main中,当您调用structure_arr函数时,您需要传递&my_array,以便函数中相应的int指针指向数组起始地址。
解决这些问题将使您以后可以成功访问阵列,并且摆脱了编译器警告。
由于数组已经是指向int
的指针,所以请不要使用运算符的地址:
[new_arr.array = &array;
应该是new_arr.array = array;
否则,将指针设置为指向int
的指针(参数的地址而不是传递的数组的地址)
也解决错字:int *array:
应该为int *array;