我想以两种不同的方式使用名为 is_subsetOf()的C函数:
方法1:int * a和int * b是大小> = 2的数组。 方式2:int * a的大小> = 2,但是int * b的大小仅为1,这意味着b是一个int。
我如何强制int * b的大小为1的C正常?还是在C中不可能?一个int是大小为1的数组?
int* is_in(int *left_hand, int n_l, int *right_hand, int n_r) {
int *get_bool;
get_bool = malloc(sizeof(int)*n_l);
for (int i=0; i<n_l; i++) {
if (is_subsetOf(right_hand, n_r, *(left_hand+i), 1)) {
*(get_bool+i) = 1;
}
}
return (get_bool);
}
int desc(const void *a, const void *b) {
return (*(int*)a - *(int*)b);
}
int is_subsetOf(int *a, int n_a, int *b, int n_b) {
qsort(a, n_a, sizeof(int), desc);
qsort(b, n_b, sizeof(int), desc);
int v = includes(a, n_a, b, n_b);
return(v);
}
这是我从编译器得到的消息。我知道这只是一个警告,但我希望一切都干净。
tmp.c: In function ‘is_in’:
tmp.c:73:47: warning: passing argument 3 of ‘is_subsetOf’ makes pointer
from integer without a cast [-Wint-conversion]
if (is_subsetOf(right_hand, n_r, *(left_hand+i), 1)) {
~~~~~~~~~^~~
tmp.c:37:39: note: expected ‘int *’ but argument is of type ‘int’
int is_subsetOf(int *a, int n_a, int *b, int n_b) {
答案 0 :(得分:1)
int * a和int * b是大小> = 2的数组。
否,它们是指针,没有任何大小。您可能是说要通过它们传递数组,但是它们不是数组。知道有区别。
int是大小为1的数组
否,int a;
是大小为1的数组; int
只是int a[1];
int b;
int* ptr1 = a;//Points to the a[0]
int* ptr2 = &b;
。但是数组可以衰减为指向其第一个元素的指针,并且变量具有地址,因此这是正确的:
int
两者现在都是相同的类型,可以以相同的方式使用。当然,您不知道is_subsetOf(right_hand, n_r, left_hand+i, 1)
后面是否还有更多的int,这种检查取决于程序员(通常是像您一样通过传递长度参数)。以下是您实际上正在寻找的代码:
left_hand+i
指针可以递增,int
将指向int
当前指向的left_hand
之后的第i个*(left_hand+i)
。同样,此类指针的有效性取决于程序员。
这里的编译器警告非常重要,因为int
的类型为int*
,并且编译器警告将其视为int
。本质上看,<DataGrid>
<DataGrid.Columns>
<DataGridTemplateColumn Header="Employee name">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<ComboBox IsEditable="True" Text="{Binding People.Name}" ItemsSource="{Binding People}" SelectedValue="{Binding People.ID}"/>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
的值是内存地址。那根本不是您想要的,它是 错误。