C:警告:赋值从整数生成指针而不使用强制转换[默认情况下启用]

C:警告:赋值从整数生成指针而不使用强制转换[默认情况下启用],c,pointers,C,Pointers,对于C来说有点陌生,并且对我在这个函数中收到的警告感到困惑: void fillPrioritiesArr(int ** priorities, int arrSize) { int currIdx = 0; while(currIdx < arrSize){ priorities[currIdx]=malloc(sizeof(int)); priorities[currIdx] = (int) rand() % 10; currIdx++; } }

对于C来说有点陌生,并且对我在这个函数中收到的警告感到困惑:

void fillPrioritiesArr(int ** priorities, int arrSize) { 
  int currIdx = 0;
  while(currIdx < arrSize){
    priorities[currIdx]=malloc(sizeof(int));
    priorities[currIdx] = (int) rand() % 10;
    currIdx++;
  }
}

这是因为一个是指针变量,另一个是int吗?还是我对这一点的理解完全错误

优先级[currIdx]
为整数指针类型。无法将int分配给地址

这样做:

int temp = (int) rand()%10;

memcpy(priorities [currIdx], &temp, sizeof(int);
试试这个

void fillPrioritiesArr(int ** priorities, int arrSize) { 
  int currIdx = 0;
  while(currIdx < arrSize){
    priorities[currIdx]=malloc(sizeof(int));
    *priorities[currIdx] = (int) rand() % 10;
    currIdx++;
  }
}
void fillPrioritiesArr(int**priorities,int arrSize){
int currIdx=0;
while(currIdx
在行中

priorities[currIdx] = (int) rand() % 10;
您正试图将
=
右侧(rhs)的
int
分配给左侧(lhs)具有类型
int*
的对象。lhs是一个变量,它包含指向存储位置的指针,您可以在该位置存储
int
。因此,为了写入该位置,首先必须使用
*优先级[currIdx]
解除对指针变量的引用。这告诉编译器:“不要写入变量本身,而是查找它指向的位置并在那里写入。”

这与您首先说的
priorities[currIdx]
类似。变量
priorities
是一个
int**
。这是指向
int
的指针。您不希望重写变量本身,但希望用新指针写入它指向的位置(类型为
int*
)。在这种情况下,您取消引用说
priorities[currIdx]
,这相当于
*(priorities+currIdx)


但是,为数组的每个插槽分配一个额外的
int
,这不仅是不必要和麻烦的,而且还会使您的代码慢得多。只需传递
int*优先级
,就可以直接拥有一个
int
s数组。然后,您可以将
malloc
行放在一起,然后像最初在问题中那样写入数组。也就是说,在不取消引用的情况下:

priorities[currIdx] = (int) rand() % 10;

因为
priorities[currIdx]
会有类型
int

你的理解是正确的,为什么不干脆
*priorities[currIdx]=(int)rand()%10
?我尝试了
*priorities[currIdx]=(int)rand()%10
priorities[currIdx]+=(int)rand()%10
,但是这两个值都不是0-10,而是一个更大的数字。@Hyun你怎么调用
fillPrioritiesArr
?它是否指向有效内存?@kiranBiradar
int**priorities=malloc(sizeof(int*)*ARR\u SIZE)
fillPrioritiesArr(优先级、ARR\u大小)@kiranBiradar啊,哇,我觉得自己像个白痴。现在修复了它(:正在输出
priorities[idx]
应该是
*priorities[idx]
priorities[currIdx] = (int) rand() % 10;