C-如果声明为int *,则函数中的参数无法处理int *

时间:2018-10-11 20:42:52

标签: c parameter-passing

我想以两种不同的方式使用名为 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) {

1 个答案:

答案 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> 的值是内存地址。那根本不是您想要的,它 错误