2015-10-16 5 views
0

У меня есть следующая проблема:Char массив против Int массива

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] 

Я задаюсь вопросом, почему б [1] не даст адрес, как у [1] ...

спасибо!

+0

'a [1]' и 'b [1]' - массивы, а не адресаты. Но это не связано с вашей очевидной проблемой. –

+0

Я не знаю, почему результат будет другим. – jackycflau

+0

Выражение 'b [1]' неявно преобразуется в 'char *', перегрузка потока для символа 'char *' печатает строку, если вы хотите, чтобы адрес необходимо указать: 'std :: cout << static_cast (b [1]);'. Он печатает адрес в случае 'a', потому что нет лучшей перегрузки для' int * '. – user657267

ответ

-1

Тип v определяет, что cout < < v prints.

В одном случае у вас есть массив int, в другом случае у вас есть массив символов. Cout по определению печатает массив символов, отличный от массива int. Так оно и есть. Как бьорн.

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?

+0

спасибо! это означает, что если я определяю char a [2] = {'a', 'b'}, это неверно? Я должен использовать вместо [3] = {'a', 'b', '\ 0'} вместо? – jackycflau

+0

@JackyLau Да! Используйте последний метод или просто [3] = "ab" –