繁体   English   中英

为什么我的 C 程序 output 是 memory 地址而不是值?

[英]Why does my C program output the memory address instead of the value?

为什么我的 C 程序 output 是 memory 地址而不是值?

我基本上只是将用户输入作为一个整数数组,然后尝试遍历数组以打印出每个元素,但是一旦程序运行,它就会输出我猜元素的“内存地址”而不是它的实际价值。

请看下面的代码:

#include <stdio.h>

int main(void) {
  
  int array[5]; //the array with x items
  int target = array[1]; //target is any second value of the array

  for (int y = 0; y < 5; y++){ //taking 5 user inputs
    if (y == 0){
      printf("Enter your %dst item: ", y+1);
      scanf("%d", &array[5]);
    } else if (y == 1){    
      printf("Enter your %dnd item: ", y+1);
      scanf("%d", &array[5]);
    } else if (y == 2){
      printf("Enter your %drd item: ", y+1);
      scanf("%d", &array[5]);
    } else{
      printf("Enter your %dth item: ", y+1);
      scanf("%d", &array[5]);
    }
  }
  
  for (int x=0 ; x < 5; x++){ //printing out array
    printf("Array[%d] = %d\n", x, array[x]);
  }
}

谢谢!

您没有为数组分配任何值。

  • int target = array[1]; 没有意义,因为数组没有初始化。 C 程序从上到下执行,赋值不会在变量之间创建一些神奇的关系:如果array[1]最终被初始化, target不会在以后神奇地更新。 如果你想要这样的东西,你可以使用指针。

  • &array[5]没有意义,因为 C 中的 arrays 是 0 索引的,您可以通过写入第 6 项来越界访问数组。 这会导致未定义的行为,未定义行为的一种可能结果是 memory 损坏。

  • printf("Array[%d] = %d\n", x, array[x]); 没有意义,因为数组还没有被初始化。 打印的值将具有不确定的值,它可以是任何值。


你可以像这样修复你的程序:

#include <stdio.h>

int main (void) 
{
  int array[5];
  int* target = &array[1];

  for (int i = 0; i < 5; i++)
  {
    const char* nstr[] = {"st", "nd", "rd", "th"};
    int index;
    if(i > 3)
      index = 3;
    else
      index = i;

    printf("Enter your %d%s item: ", i+1, nstr[index]);
    scanf("%d",&array[i]);
  }
  for (int i=0; i < 5; i++)
  {
    printf("Array[%d] = %d\n", i, array[i]);
  }

  printf("Target: %d\n", *target);
}

Output & 输入示例:

Enter your 1st item: 1
Enter your 2nd item: 2
Enter your 3rd item: 3
Enter your 4th item: 4
Enter your 5th item: 5
Array[0] = 1
Array[1] = 2
Array[2] = 3
Array[3] = 4
Array[4] = 5
Target: 2

首先,你还没有像你一样读过这个数组。 这个更好:

for (int y = 0; y < 5; y++){ //taking 5 user inputs
    printf("Enter your %dst item: ", y+1);
    scanf("%d", &array[y]);
}

请注意,我读的是 &array[y],但不是 &array[5]。 您必须将 scanf 作为 arg 数据的目的地地址。 是一样的

for (int y = 0; y < 5; y++){ //taking 5 user inputs
     printf("Enter your %dst item: ", y+1);
     scanf("%d", array+y);
}

所以,你正确的编将是这样的:

    int main(void) {

      int array[5]; //the array with x items
      //int target = array[1]; //target is any second value of the array I dont know what you want here

      for (int y = 0; y < 5; y++){ //taking 5 user inputs
          printf("Enter your %dst item: ", y+1);
          scanf("%d", array+y);
      }

      for (int x=0 ; x < 5; x++){ //printing out array
          printf("Array[%d] = %d\n", x, array[x]);
      }
   }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM