簡體   English   中英

C-如果聲明為int *,則函數中的參數無法處理int *

[英]C - parameter in function can't handle int if declared as int*

我想以兩種不同的方式使用名為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) {

int * a和int * b是大小> = 2的數組。

不,它們是指針,沒有任何大小。 您可能是說要通過它們傳遞數組,但它們不是數組。 知道有區別。

一個整數是一個大小為1的數組

不, int a[1]; 是大小為1的數組; int a; 只是int 但是數組可以衰減為指向其第一個元素的指針,並且變量具有地址,因此這是正確的:

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

現在兩者都是相同的類型,並且可以以相同的方式使用。 當然,您不知道int是否在內存中后面跟隨着更多的int,這種檢查取決於程序員(通常像您一樣通過傳遞長度參數)。 以下是您實際上正在尋找的代碼:

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

指針可以被遞增, left_hand+i將指向第i intintleft_hand當前指向。 同樣,這種指針的有效性取決於程序員。

此處的編譯器警告非常重要,因為*(left_hand+i)的類型為int ,並且編譯器警告其將其視為int* 本質上是將int的值視為內存的地址。 那根本不是您想要的,這 一個錯誤

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM