C:警告:赋值从整数生成指针而不使用强制转换[默认情况下启用]
对于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++; } }
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
?它是否指向有效内存?@kiranBiradarint**priorities=malloc(sizeof(int*)*ARR\u SIZE)代码>fillPrioritiesArr(优先级、ARR\u大小)代码>@kiranBiradar啊,哇,我觉得自己像个白痴。现在修复了它(:正在输出priorities[idx]
应该是*priorities[idx]
priorities[currIdx] = (int) rand() % 10;