我的問題是,我的整數數組的值更改時,它傳遞給函數計算。這些值對於索引0和2-> 5是正確的。C程序:整數數組指針更改值時,作爲參數傳遞
由於某些原因,索引1和6+不是正確的值。
以下是我的代碼。
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
int* generate_rand (int length, int MAX_ARRAY);
void calculate (int *array_ptr, int length, int *mean, int *sd);
main() {
srand(time(NULL));
int a;
printf("\nArray length?: ");
scanf("%d", &a);
int* array_ptr2;
array_ptr2 = generate_rand(a, 100);
//int mean, sd;
int* *mean;
int* *sd;
int i = 0;
for (i = 0; i < 10; i++) {
printf("Array2: %d\n", *(array_ptr2 + i));
}
calculate(array_ptr2, a, *mean, *sd);
//printf("Mean: %d\n", (int)*mean);
}
int* generate_rand (int length, int MAX_ARRAY) {
int arr[length];
int i;
for (i = 0; i < 10; i++) {
int r = rand()%MAX_ARRAY;
arr[i] = r;
printf("Rand: %d\n", arr[i]);
}
int *arrPtr;
arrPtr = &arr[0];
return arrPtr;
}
void calculate (int *array_ptr, int length, int *mean, int *sd) {
int sum;
int i;
for (i = 0; i < length; i++) {
printf("Array: %d\n", *(array_ptr + i));
sum += *(array_ptr + i);
//array_ptr++;
printf("Sum: %d, i:%d\n", sum, i);
}
//*mean = sum/length;
}
你知道我在做什麼錯嗎?
generate_rand正在返回一個指向局部變量的內容的指針,這是沒用的。 –
所以你說我應該在include語句的下面聲明array_ptr2?我剛剛嘗試過,我仍然得到相同的結果。 – twbbas
你必須分配你自己的數組(使用'malloc'或'calloc'或其他東西),'generate_rand'中的那個數組在'函數結束時消失'。看起來你已經繞過了關於通過首先將它放入一個臨時指針來返回一個局部變量的警告。 – dreamlax