[英]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.