#include <stdio.h>
#include <stdlib.h>
typedef struct{
int lab;
int arr[20];
int vac;
}bookings;
void checkIn(bookings *in)
{
printf("It is %i",in[0].arr[0]);
}
int main(){
bookings b[5];
int a,c;
/*Initializing struct variables*/
for(a=0;a<5;a++)
{
for(c=0;c<20;c++)
{
b[a].arr[c]=0;
b[a].vac=20;
/*printf("Lab %i PC %i is %i\n",a,c,b[a].arr[c]);*/
}
/*printf("Lab %i has vacant %i\n",a,b[a].vac);*/
}
b[0].lab=101;
b[1].lab=201;
b[2].lab=301;
b[3].lab=401;
b[4].lab=501;
checkIn(&b);
return 0;
}
根据代码,我在arr [20]数组中赋值为0,在每个结构中,vac值为20.我想要做的就是传递数组结构进入函数并读取函数中的值。根据我到目前为止所读到的内容,使用函数参数中的指针并传递struct address数组应该可以正常工作。
编译时,它会显示错误,错误从不兼容的指针类型&#39;传递checkIn的argument1。 我的预期输出是
It is 0
任何帮助都会非常感激!
答案 0 :(得分:4)
表达式&b
提供b
数组的地址,而不是第一个元素。它们位于内存中的相同位置,但类型不同。 &b
的类型为bookings (*)[5]
;也就是说,指向一个包含五个bookings
es的数组的指针。您的函数只需要bookings*
(指向单个bookings
的指针或未知数量的数组的开头)。你可以通过跳过&
并只是传递b
,或者通过查看&(b[0])
来获取第一个地址的数组到指针衰减数组的元素。
答案 1 :(得分:3)
您需要在没有&
- checkIn(b)
;
如果有&
,则数组不会转换为指向第一个元素的指针,类型为bookings (*)[5]
。函数需要bookings*
,并且会收到警告。
如果没有&
,则数组会衰减到指针并且预期的类型是正确的。
答案 2 :(得分:2)
应该是:
checkIn(b);
&b
会返回bookings(*)[5]
的类型。如果你需要修改你的数组(不是它的元素,它们已经通过引用传递)会很有用。