代码之家  ›  专栏  ›  技术社区  ›  lrthistlethwaite

如果声明为int,则函数中的C参数不能处理int*

  •  0
  • lrthistlethwaite  · 技术社区  · 6 年前

    是\ subsetOf() 以两种不同的方式:

    方式2:int*a有size>=2,但int*b只有大小1,这意味着b是int。

    我怎样才能强迫C同意int*b的大小是1?或者这在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 回复  |  直到 6 年前
        1
  •  1
  •   Quimby    6 年前

    int*a和int*b是大小为>=2.

    不,它们是指针,没有任何尺寸。你可能是想让数组通过它们,但是它们 数组。要知道这是有区别的。

    int是大小为1的数组

    int a[1]; 是大小为1的数组; int a; 只是 int

    int a[1];
    int b;
    int* ptr1 = a;//Points to the a[0]
    int* ptr2 = &b;
    

    is_subsetOf(right_hand, n_r, left_hand+i, 1)
    

    指针可以递增, left_hand+i 将指向第i个 之后 内景 去哪 left_hand

    编译器警告在这里非常重要,因为 *(left_hand+i) 属于类型 内景 编译器警告它将 int* . 从本质上看 内景 一个错误