数组中的转换导致错误的结果

时间:2013-07-17 11:09:29

标签: c arrays

让我说我有

char number[2] = "2";

在我的代码中,我将数字2作为字符串,这就是为什么我有char。现在使用atoi我将此char转换为int

int conv_number;
conv_number = atoi(number);
printf("Result : %d\n", conv_number);

返回结果:2。现在我想把这个值放在一个数组中并打印出数组的结果。所以我写了

int array[] = {conv_number};
printf("%d\n",array);

不幸的是我的结果不是2而是-1096772864。我错过了什么;

3 个答案:

答案 0 :(得分:9)

您错过了array int[]而非int,这是使用数字格式参数printf%d的预期第二个参数}。

请改用printf("%d\n",array[0]),因为您想要访问数组中的第一个值。

进一步说明

在这种情况下,array表达式中的printf表现为int*。如果您使用printf("%d\n",&array[0]),即第一个元素的地址,您将得到相同的结果。请注意,如果您真的对地址感兴趣,请改用%p格式说明符。

答案 1 :(得分:2)

在表达式printf("%d\n",array);中,array是一个int(显然)数组,类似于int*array的值不是第一个单元格的值(例如,数组[0]),而是衰减到数组的地址。

如果您多次运行代码,您可能会有不同的值(阵列位置会因一次运行而异)

你必须写:printf("%d\n",array[0]); 这相当于printf("%d\n",*array);

答案 2 :(得分:1)

您正在打印阵列的基地址。而不是你需要在该阵列地址打印值。等,

printf("%d",array[0]);