我寫了一個短代碼,它可以從整數數組中計算平均值。我首先創建了一個名爲mean.h
的頭文件,如下所示。C:使用整數類型指針參數計算數組長度
#ifndef MEAN_H
#define MEAN_H
double mean(int *inputs) {
int i = 0;
int len;
while((inputs[i]) != '\0') {
++i;
}
len = i;
for(i=0; i<len; i++) {
printf("%d ", *(inputs+i));
}
printf("\n");
int sum = 0;
printf("input length: %d\n", len);
for(i=0; i<len; i++) {
sum += *(inputs+i);
}
double mean = sum/len;
return mean;
}
#endif
然後,爲了檢查代碼是否工作正常,我創建了另一個代碼test.c
。
#include <stdio.h>
#include "mean.h"
int main(int argc, char **argv) {
int arr[5] = {94, 28, 54, 72, 89};
double meanVal = mean(arr);
int arrlen = sizeof(arr)/sizeof(arr[0]);
printf("Input length: %d\n", arrlen);
printf("Inputs: ");
int i;
for(i=0; i<5; i++) {
printf("%d ", *(arr+i));
}
printf("\n");
printf("Mean: %lf\n", meanVal);
return 0;
}
當我編譯和運行代碼,它表現出一個非常奇怪的結果,這樣的..
94 28 54 72 89 32767 2123416711 352349365 1594502056 32767 -1876691539 32767 -1876691539 32767
input length: 14
Input length: 5
Inputs: 94 28 54 72 89
Mean: 22644032.000000
前五個要素都沒有問題打印出來,但我仍然想不通的地方接下來的另外9個元素來自於。我相信這可能是這個代碼片段不合適。
while((inputs[i]) != '\0') {
++i;
}
在這種情況下,我該如何修改這個以便用指針變量參數來計算數組長度?
「我認爲可能是這段代碼片段不合適。」你是對的。你原來的'arr'中究竟有一個'\ 0'字符? – kaylum
@kaylum我認爲null表示數組的末尾。如果這是一個錯誤的方法,我應該如何指示數組的結束?我已經嘗試過使用NULL來代替,但事實證明這是錯誤的,在控制檯上打印的消息說'指針和整數('int'和'void *')之間的比較'。 – MarshallLee
不,沒有這樣的一般規則,C中的數組會自動被任何值終止。 C字符串確實被定義爲以'\ 0'結尾,但是它特定於字符串而不是數組。由您決定如何標記數組的末尾。您可以使用不是有效數據值的標記值(例如,0或-1),但是你需要明確地設置(實際上0可以隱式設置,但現在會離開)。另一個常見的習慣是將數組大小傳遞給函數。 – kaylum