我很抱歉這個愚蠢的問題,但我是C和指針的新手。
我寫了一個簡單的程序,找到最大的一個整數集的:使用指針和數組時奇怪的結果
#include <stdio.h>
#define MAX 10
int* getIntegers() {
int a[MAX];
int i = 0;
while (i < MAX) {
int n;
printf("Insert an integer: ");
scanf("%d", &n);
a[i] = n;
i++;
}
int *p = a;
return p;
}
int findMax(int *s) {
int max = -1000000;
for (int i = 0; i < MAX; i++) {
if (s[i] > max) {
max = s[i];
}
}
return max;
}
int main() {
int *p = getIntegers();
int max = findMax(p);
printf("Max value: %d\n", max);
return 0;
}
這個程序似乎工作,但如果我從10更改MAX
值到另一個號碼停止工作,它返回另一個作爲輸入我沒有通過的大價值。這個問題似乎是當我調用函數findMax(int *array)
時,因爲如果我打印由函數getIntegers()
創建的數組,一切似乎都可以。有誰能夠幫助我?
誰告訴你從函數'return p;'返回一個棧分配數組,你可以使數組成爲靜態的'static int a [MAX];'但是b你避免它,並使用malloc代替。 –
在'getIntegers'中,您將返回一個指向局部變量的指針。 –
請不要使用'scanf'。使用'fgets'或'gets_s'然後'sscanf'。並檢查返回值。 –