对于C来说,这是一个相当新的东西,对于我在此函数中收到的警告感到困惑:
void fillPrioritiesArr(int ** priorities, int arrSize) {
int currIdx = 0;
while(currIdx < arrSize){
priorities[currIdx]=malloc(sizeof(int));
priorities[currIdx] = (int) rand() % 10;
currIdx++;
}
}
特别是这一行:
priorities[currIdx] = (int) rand() % 10;
是因为一个指针变量而另一个是int变量吗?还是我对此的理解是完全错误的?
答案 0 :(得分:0)
尝试
void fillPrioritiesArr(int ** priorities, int arrSize) {
int currIdx = 0;
while(currIdx < arrSize){
priorities[currIdx]=malloc(sizeof(int));
*priorities[currIdx] = (int) rand() % 10;
currIdx++;
}
}
答案 1 :(得分:0)
在线
priorities[currIdx] = (int) rand() % 10;
您正在尝试将int
右侧(rhs)上的=
分配给左侧类型为int*
的内容( lhs)。 lhs是一个变量,该变量持有一个指向可以存储int
的存储位置的指针。因此,为了写入该位置,您首先必须使用*priorities[currIdx]
取消引用指针变量。这告诉编译器:“不要写变量本身,而要查找它指向的位置并在那里写。”
这与您一开始说priorities[currIdx]
时的操作类似。变量priorities
是int**
。这是指向int
的指针。您不想覆盖变量本身,而是想要使用新的指针写其指向的位置(类型为int*
)。在这种情况下,您会取消引用priorities[currIdx]
的意思,这等同于*(priorities + currIdx)
。
但是,为数组的每个插槽分配额外的int
不仅不必要而且麻烦,而且还会使您的代码慢得多。您只需直接传递int
就可以直接拥有一个int* priorities
数组。 然后,您只需将malloc
行放在一起并像最初在问题中一样写入数组即可。也就是说,无需取消引用:
priorities[currIdx] = (int) rand() % 10;
因为priorities[currIdx]
的类型为int
。
答案 2 :(得分:-1)
priorities [currIdx]
是整数指针类型。您无法将int分配给地址。
执行以下操作:
int temp = (int) rand()%10;
memcpy(priorities [currIdx], &temp, sizeof(int);