此C程序假设从用户获取五个整数值并将它们存储在一个数组中。其次,它将要求用户提供另一个整数n。该值将用作数组元素的乘数。接下来,它将修改数组的元素,使新值是原始值的n倍,其中n是乘数。我将使用函数传递第一个数组元素的地址,并使用n,来修改值。
现在这是我提出的代码,但它只修改了数组的第一个元素。
#include <stdio.h>
#define SIZE 5
void multiply(int *aPtr, int);
int main(){
int array[SIZE];
int i=0;
int m;
printf("Enter 5 integers: ");
for(i=0; i<SIZE; i++){
scanf("%d", &array[i]);
}
printf("Please enter the multiplier: ");
scanf("%d", &m);
multiply(&array[0], m);
for(i=0; i<SIZE; i++){
printf("%d ", array[i]);
}
return 0;
}
void multiply(int *aPtr, int mul){
for(i=0; i<SIZE; i++)
*aPtr = *(aPtr+i) * mul;
}
答案 0 :(得分:1)
乘法后,您将所有值存储到同一位置,即*ptr
。改变
*aPtr = *(aPtr+i) * mul;
到
*(aPtr+i) = *(aPtr+i) * mul;
答案 1 :(得分:1)
修改
*aPtr = *(aPtr+i) * mul;
到
*(aPtr+i) = *(aPtr+i) * mul;
另请注意,在C中没有传递参考。参数按值复制。你可以模拟但它不是模拟。
答案 2 :(得分:0)
您必须增加数组位置。让你的代码像这样。在调用时你必须传递数组地址。 multiply(array, m);
for(i=0; i<SIZE; i++,aPtr++)
*aPtr = *aPtr * mul;
或者。
for(i=0; i<SIZE; i++)
*(aPtr+i) = *(aPtr+i) * mul;
因为* aPtr指向数组的第一个位置。在第一次乘法后,我们必须移动到第二位置。所以增量需要。对不起,第一个答案。
答案 3 :(得分:0)
您必须将每个位置的值相乘并再次将其存储在相同的位置
在您的代码中,只会存储乘以的最后一个值,因为*aPtr
将指向第一个位置。
试试这段代码......
#include <stdio.h>
#define SIZE 5
void multiply(int *aPtr, int);
int main(){
int array[SIZE];
int i=0;
int m;
printf("Enter 5 integers: ");
for(i=0; i<SIZE; i++){
scanf("%d", &array[i]);
}
printf("Please enter the multiplier: ");
scanf("%d", &m);
multiply(&array[0], m);
for(i=0; i<SIZE; i++){
printf("%d ", array[i]);
}
return 0;
}
void multiply(int *aPtr, int mul){
int i = 0;
for(i=0; i<SIZE; i++)
*(aPtr + i) = *(aPtr+i) * mul;
}