[英]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 int
后int
到left_hand
當前指向。 同樣,這種指針的有效性取決於程序員。
此處的編譯器警告非常重要,因為*(left_hand+i)
的類型為int
,並且編譯器警告其將其視為int*
。 本質上是將int
的值視為內存的地址。 那根本不是您想要的,這是 一個錯誤 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.