[英]warning: assignment makes pointer from integer without a cast [enabled by default]
[英]C: Warning: assignment makes pointer from integer without a cast [enabled by default]
對於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嗎? 還是我對此的理解是完全錯誤的?
嘗試這個
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;
您正在嘗試將=
右側(rhs)的int
分配給左側(lhs)類型為int*
內容。 lhs是一個變量,它包含一個指向可以存儲int
的存儲位置的指針。 因此,為了寫入該位置,您首先必須使用*priorities[currIdx]
取消引用指針變量。 這告訴編譯器:“不要寫變量本身,而要查找它指向的位置並在那里寫。”
這與您首先說priorities[currIdx]
時的操作類似。 可變priorities
是int**
。 那是一個指向int
的指針。 您不想覆蓋變量本身,而是想要使用新的指針寫其指向的位置(類型為int*
)。 在那種情況下,您取消引用說priorities[currIdx]
,它等效於*(priorities + currIdx)
。
但是,為數組的每個插槽分配額外的int
不僅不必要而且麻煩,而且還會使您的代碼慢得多。 通過簡單地傳遞int* priorities
,您可以直接擁有一個int
數組。 然后,您可以像原來在問題中一樣將所有malloc
行放在一起並寫入數組。 也就是說,無需取消引用:
priorities[currIdx] = (int) rand() % 10;
因為priorities[currIdx]
將具有int
類型。
priorities [currIdx]
是整數指針類型。 您不能將int分配給address。
做這個:
int temp = (int) rand()%10;
memcpy(priorities [currIdx], &temp, sizeof(int);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.