10 / 10 / 5
Регистрация: 30.01.2013
Сообщений: 99
|
|||||||||||||||||||||||||||||||
1 | |||||||||||||||||||||||||||||||
Детально о массивах24.02.2014, 09:06. Показов 673. Ответов 4
Метки нет (Все метки)
Всем доброго времени суток. Уже создавал похожий пост, думал, все понял, но вот прошел ровно год и появились новые вопросы. Дело пойдет о массивах, а точнее о том, что происходит в компиляторе, когда мы их объявляем.
На данный момент, у меня такое представление о них: Случай первый:
Случай четвертый:
Прошу поправить меня (или дополнить), где я неверно представляю принципы работы массивов. Вопрос: Если в четвертом случае я все верно описал, почему же тогда можно использовать следующую конструкцию: printf("%c", **mass); - тут смущает двойное разыменование. Но ведь речь идет не о массиве указателей! Как такое возможно?
0
|
24.02.2014, 09:06 | |
Ответы с готовыми решениями:
4
многопоточность детально! В массивах G(8), K(19) определить кол-во и произведение элементов меньших 26 в двух заданных массивах (6;34) Детально изучена механика полета мух Опишите, пожалуйста, детально разгон проца и оперативы |
127 / 126 / 59
Регистрация: 22.01.2014
Сообщений: 462
|
|
24.02.2014, 23:51 | 2 |
двойное разыменование дает доступ к символу, а не к строке.
Эквивалентно printf("%c", mass[0][0]);//Должно вывести A. Первое разъименовывание дает доступ к "Andrey", второе к букве A. Как я понимаю, дело в том что "имя" массива, фактически является указателем на первый элемент массива. имя дает указатель(адрес), раизменовывание(или [0]) дает доступ к первому элементу, второе разъименовывание к его первому элементу базового типа из прошлой операции.
1
|
Ушел с форума
|
|||||||||||
25.02.2014, 03:33 | 3 | ||||||||||
1. const-указатель и указатель на const-данные - это вовсе не одно и то же.
const-указатель нельзя двигать, но зато можно изменять данные, на которые он указывает. Указатель на const-данные, наоборот, двигать можно, но зато через него можно обращаться к данным только на чтение. Есть еще const- указатели на const-данные (для параноиков). 2. В C/C++ строковые литералы константны (по стандарту языка), попытка их изменения ведет к неопределенному поведению. Например:
1
|
10 / 10 / 5
Регистрация: 30.01.2013
Сообщений: 99
|
|||||||||||
26.02.2014, 00:37 [ТС] | 4 | ||||||||||
Николай, я знаю что такое двойное разыменование и знаю результат таких действий, но, понимаете, двойное разыменование можно применять только к указателю на указатель, но в четвертом случае создается не массив указателей, иначе имя массива было бы указателем на указатели.
В действительности же в четвертом случае создается просто массив символов, т.е. получается мы имеем один указатель на символы (по крайней мере так говорили знатоки из другого моего поста: Для разбирающихся в работе массивов и указателей) и применить двойное разыменование тут нельзя, хотя на деле оно работает. У меня определенно где-то ошибка в представлении работы массивов и указателей. На данный момент меня интересует, что же все таки происходит "за кулисами" в этой инструкции:
Убежденный, с первым знаком, просто иногда путаю объявления const char* и char * const ввиду недостатка опыта работы с подобным) А про второе и третье не знал, спасибо. P.S. Прочтите мой пост выше. Не знаете ответа на вопрос? Добавлено через 10 минут nikolay1982, кстати, все обращения вида: mass[2][3] автоматически заменяются компилятором в *(*(mass+2)+3). Пример:
Убежденный, неправильно пытаться совершить присвоение pName[0] = "D"; - тут нужны одинарные кавычки
0
|
Модератор
12458 / 7482 / 1753
Регистрация: 25.07.2009
Сообщений: 13,762
|
||||||||||||||||
26.02.2014, 01:42 | 5 | |||||||||||||||
Да оно и с одинарными не должно работать. По сути само объявление
Что же до вопроса по поводу двухмерных массивов, намекну:
Код
$ ./shortstring 5 8 16 5 8 16
0
|
26.02.2014, 01:42 | |
26.02.2014, 01:42 | |
Помогаю со студенческими работами здесь
5
Объясните, пожалуйста, код (детально метод gameUpdate() Нужно детально разобрать, почему цикл бесконечный Как детально посмотреть то что находиться в строковой переменной вопрос по MySql+php (введите более детально описание) Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |