c - 需要了解一个用输出覆盖输入的简单示例

标签 c arrays pointers parameters

我的问题可能很愚蠢,但我需要了解一个关于函数中先前输出值覆盖输入值的简单示例。

这是这个简单的代码片段:

#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 个数组(inputoutput),我计算 input 数组每个值的平方,然后我将结果存储在 output 数组中。我通过为每次调用computeSquare函数分配outputinput来重复该过程:我使用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/

相关文章:

c - 为什么这个程序在我的 Linux 上运行时给出 "segmentation fault"?

c - 我最喜欢的段错误!!为什么?

c - 如何将 char* 转换为字符串?

c++ - 删除动态数组C++中的单个元素

c - 在 C 中访问时取消引用的指针数组

C - 数组内容交换

c - 枚举类型的位运算

Javascript - 按每个数组中元素的升序重新排列数组元素

java - 在 Java 中,char[] 是一个对象吗?

指针的c++ vector 以不同方式推回