我的问题可能很愚蠢,但我需要了解一个关于函数中先前输出值覆盖输入值的简单示例。
这是这个简单的代码片段:
#include <stdio.h>
#include <stdlib.h>
void computeSquare(int input[], int output[]) {
int i;
for (i = 0; i < 5; i++)
output[i] = input[i] * input[i];
}
int main(void) {
int i, j;
int input[5];
int output[5];
int *ptr;
for (i = 0; i < 5; i++)
input[i] = i;
// Pointer to do the link between 2 calls of computeSquare
ptr = input;
for (j = 0; j < 5; j++) {
computeSquare(ptr, output);
ptr = output;
}
for (j = 0; j < 5; j++)
printf("output[%d] = %d\n", j, output[j]);
}
如您所见,我有 2 个数组(input
和 output
),我计算 input
数组每个值的平方,然后我将结果存储在 output
数组中。我通过为每次调用computeSquare函数分配output
和input
来重复该过程:我使用ptr
指针来执行此操作.
我不明白为什么我在执行时没有得到有效的结果(当我打印 output
值时)。
我认为我可以使用相同的地址(实际上是函数的第一个和第二个参数的第一个元素的地址):
computeSquare(ptr, output);
ptr = output;
我认为,在 computeSquare
函数中,我可以:
output[i]= output[i]*output[i];
这样 output[i]
值将替换为 output[i]*output[i]
。
我不知道我的推理哪里不好,
谢谢
最佳答案
推理是正确的,答案也是正确的。只是这些值溢出了 int。将数组转换为浮点型即可正常工作。
#include <stdio.h>
#include <stdlib.h>
void computeSquare(float input[], float output[]) {
int i;
for (i=0; i< 5; i++)
output[i]= input[i]*input[i];
}
int main(void) {
int i,j;
float input[5];
float output[5];
float *ptr;
for (i=0; i<5; i++)
input[i] = i;
// Pointer to do the link between 2 calls of computeSquare
ptr = input;
for (j=0; j<5; j++)
{
computeSquare(ptr, output);
ptr = output;
for (int k=0; k<5; k++)
printf("output[%d] = %f\n", k, output[k]);
}
for (j=0; j<5; j++)
printf("output[%d] = %f\n", j, output[j]);
return 0; }
关于c - 需要了解一个用输出覆盖输入的简单示例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34299480/