0 / 0 / 0
Регистрация: 15.02.2020
Сообщений: 11
|
|||||||||||||||||||||
1 | |||||||||||||||||||||
Что такое char *a[2], и в чем его отличие от char *a?15.02.2020, 13:45. Показов 2087. Ответов 3
Метки нет Все метки)
(
Предположу, что char *a - указатель на символьный элемент(адрес), а char *a[2] - массив указателей на указатели на символьные переменные(адреса адресов). В частности, если
b - адрес адреса некоторого символьного элемента, b + 1 - адрес следующего адреса другого символьного элемента... Поэтому запись
Запись
1) Создаются адреса b, b + 1 адресов символьных элементов. b[0] и b[1] означает данные, которые лежат в адресах b, b+1, а в последних, как мы знаем, лежат адреса символьных элементов. Значит b[0] - адрес одного символьного элемента, b[1] - другого. Я так понял запись квадратный скобок есть аналог разыменования указателя, то есть мы "разыменовываем" b, b+1, обращаясь данным b[0], b[1] , которые лежат по этим адресам. 2) Для адресов символов b[0], b[1] повторяется алгоритм, разобранный выше. Кстати, допустим
То, что программа вывела строку "Hello" с пробелом понятно - b[0] - указатель на символьный элемент, отождествляемый со строкой, начало которой имеет адрес b[0] совпадающий с адресом первого символа строки. Но почему далее программа вывела символ 'K'? По идее, b[1]+1 - адрес символа 'i', поэтому, учитывая спецификатор с, должен был быть выведен символ 'i'.
0
|
|
15.02.2020, 13:45 | |
Ответы с готовыми решениями:
3
В чем отличие char* s от char *s В чем отличие двумерного массива типа char от массива указателей на char?
|
1272 / 1029 / 470
Регистрация: 25.12.2016
Сообщений: 3,333
|
|||||||||||
15.02.2020, 13:53 | 2 | ||||||||||
Нет. Должен быть выведен адрес символа 'i'. Точнее, адрес, приведённый к типу char.
Чтобы вывести сам символ, адрес нужно разименовать:
Или то же самое можно записать по-другому:
0
|
0 / 0 / 0
Регистрация: 15.02.2020
Сообщений: 11
|
|
15.02.2020, 14:22 [ТС] | 3 |
1) Берется численное двоичное значение адреса b[1] + 1 (то есть сам этот адрес, так как адреса хранятся в двоичном коде). 2) Его в двоичном виде нужно "обрезать", чтобы уместить в 8 бит. 3) Последовательности из полученных 8 упорядоченных нулей и единиц ставится символ в соответствии с таблицей ANSI. Далее рассмотрим двоичный код самого символьного элемента *(b[1]+1)=b[1][1]. Чтобы определить этот элемент, нужно посмотреть на адрес b[1]+1, и по этому адресу увидеть двоичное представление символьного элемента, расположенного по этому адресу. Двоичный код (char) (b[1]+1) не обязан совпадать с двоичным кодом символа b[1][1],так как мы можем сами фиксировать символ b[1][1], а его адрес компьютер произвольно фиксирует сам, следовательно и значение (char) (b[1]+1), зависящее от b[1]+1 произвольно, и зависит от прихотей компьютера.
0
|
1272 / 1029 / 470
Регистрация: 25.12.2016
Сообщений: 3,333
|
|
15.02.2020, 15:06 | 4 |
Rusit8800, всё так.
0
|
15.02.2020, 15:06 | |
Помогаю со студенческими работами здесь
4
Что такое char** Что такое char* ? Чем отличается const char* от char*? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |