我有以下问题:
int a[2][2]={{1,2},{3,4}};
cout<<a[1]; //the output is 0x29ff18 , which is an address
--------------------------------------------------------------------
char b[][6]={"hello","there","now"};
cout<<b[1]; //the output is there, which is value of b[1]
我想知道为什么b [1]不会给出像[1] ......
这样的地址谢谢!
答案 0 :(得分:1)
字符数组和整数数组之间的基本区别是终止空字符:\0
如果你声明你的角色数组如下:
char b[] = {'h','i'};
然后你的cout
语句无法确定要做什么,并会给出奇怪的输出。但是,只要你这样做:
char b[] = {'h','i','\0'};
或
char b[] = "hi";
您的cout
工作正常。这是因为首先,您在结尾处显式添加空字符,而在第二步中,它会被编译器自动添加。
对于数组和声明为a[]
或a[][]
的数组,编译器将数组的第一个元素的地址存储在变量a
中,因此您获得的地址为非字符数组的第一个元素。
有关详细信息,请参阅此链接:
What is the difference between int and char arrays?
答案 1 :(得分:-1)
v的类型确定cout&lt;&lt; v打印。
你有一个int数组的情况,其他情况你有char数组。根据定义,Cout打印一个不同于int数组的char数组。就是这样。作为bjorne。