[英]why does the printf not showing
我需要幫助。 它不顯示平均 function 中的 printf。 我正在 c 中進行動態分配,添加 function 有效,但平均值 function 不顯示。 添加 function 沒有問題,但最大值沒有。 很抱歉,我知道這個問題很簡單,但仍然無法得到答案。 在主調用期間,我也收到了關於添加 function 的警告。
這是我的代碼:
typedef int* Statistician;
void add(Statistician answer, int *count, int *SIZE, int item);
|
[Note] expected 'Statistician' {aka 'int *'} but argument is of type 'int **'
int main() {
int SIZE;
Statistician *answer;
int count;
int item;
add(answer, count, SIZE, item);
|
//[Warning] passing argument 1 of 'add' from incompatible pointer type [-Wincompatible-pointer-types]
printf("\nThe mean is: %.2f", mean(answer, SIZE));
return 0;
}
這是添加 function:
void add(Statistician answer, int *count, int *SIZE, int item) {
int i;
printf("Enter n: ");
scanf("%d", &item);
answer = (int*)malloc(item * sizeof(int));
if(item == NULL) {
printf("Memory not allocated.\n");
exit(0);
}
else {
for(i = 0; i < item; ++i) {
scanf("%d", &answer[i]);
}
printf("Elements of array are: ");
for(i = 0; i < item; i++) {
printf("%d ", answer[i]);
}
if(item == 10) {
int m;
printf("\nAppend array: ");
scanf("%d", &m);
answer = realloc(answer, m * sizeof(int));
for(i = item; i < item + m; i++) {
scanf("%d", &answer[i]);
}
item = item + m;
int temp, j;
for(i = 0; i < item; i++) {
for(j = 0; j <= i; j++) {
if(*(answer + i) < *(answer + j)) {
temp = *(answer + i);
*(answer + i) = *(answer + j);
*(answer + j) = temp;
}
}
}
printf("Final array: \n");
for(i = 0; i < item; ++i) {
printf("%d ", answer[i]);
}
}
}
}
這是不顯示的最大 function:
float mean(Statistician answer, int count) {
int mean =0;
int cnt = 0;
for(int i=0;i<count;i++){
mean = mean + answer[i];
cnt++;
}
mean = mean / cnt;
return mean;
}
我完全期望找到一個重復的,但我沒有。
add 的第一個參數被聲明為int **
(通過typedef
),並且您向它傳遞了一個int *
類型的參數。 編譯器將允許您執行此操作並發出警告,但這幾乎總是錯誤的。 不要這樣做。
如果您正在運行 64 位代碼,那么在您踩下 memory 之后,任何事情都可能發生。 32 位代碼更容易預測,但它仍然會以糟糕的方式結束。
從您的代碼中,您似乎想要void add(Statistician *answer
, Statistician answer;
和add(&answer
。
指針的深度學習就到這里了。 在調用 function 中需要修改的東西是其地址傳遞給被調用 function 的東西。 用malloc
分配 arrays 幾乎總是最終成為雙指針。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.