我有这段代码:
#include "stdafx.h"
#include <iostream>
typedef struct{
int s1;
int s2;
char c1;
char* arr;
}inner_struc;
int _tmain(int argc, _TCHAR* argv[])
{
inner_struc myinner_struct;
myinner_struct.s1 = myinner_struct.s2 = 3;
myinner_struct.c1 = 'D';
char arr[3] = {1,2,3};
myinner_struct.arr = arr;
std::cout << "first array element: " << myinner_struct.arr[1] << std::endl;
return 0;
}
我想知道为什么我会得到一个笑脸而不是第一个数组元素!我在这做错了什么?它编译并运行正常,但输出
第一个数组元素:“笑脸”
这意味着什么? 我正在使用Visual Studio 2010.谢谢
答案 0 :(得分:2)
您正在输出此数组中的第二个元素:
char arr[3] = {1,2,3};
您已为其分配值1 2和3,但该变量的类型为char,因此它被解释为ascii。如果你在ascii图表上查找哪个字符的值为2,你会看到它是一张笑脸。所以它确实按照你的要求去做。
http://mathbits.com/MathBits/CompSci/Introduction/ASCIIch.jpg
您对输出的期望是什么?如果您希望它是一个数字,那么您必须将该数字的字符表示添加到数组中。即代替1
,2
或3
使用'1'
,'2'
和'3'
答案 1 :(得分:1)
inner_struct.arr被声明为char *,这意味着它包含一个字符数组(字节)。你想要一个数组来保存数字1,2,3吗?如果是这样,请使用int。如果需要字母,请使用以下命令初始化数组:
char arr[3] = { 'a', 'b', 'c' };
KC
答案 2 :(得分:1)
到目前为止,正如我所看到的,您正在尝试输出第一个数组元素。但相反,您正在打印第二个(数组从0开始索引,而不是1)。第二个元素是2.现在,请看一下this table,你可以看到:数字2是笑脸。问题是你输出的代码是2,而不是'2'。为了输出deuce,让你的数组看起来像这样:
char arr[3] = {'1','2','3'};