Qraizer 
спасибо за разъяснение!
		
		спасибо за разъяснение!


 
 Прекрасно компилится gcc
Код: char* pch;
char charr[10];
pch = charr;
Безусловно, массив и указатель - две разные сущности (с этим не поспоришь =) ), а вот charr и pch - следует воспринимать как одно и то же после строчки pch = char.Что значит "воспринимать как одно и то же"? Что их сущности станут одинаковыми?? И почему "после строчки"? Наверное, я отстал от новых стандартов в C++, в которых отменён принцип неизменности типа объекта, а оператор присваивания копирует тип вместе со значением...
Ну вся разница в том, что sizeof(charr)==10, а sizeof(pch)==4.И всё???
Компилятор работает так, что он преобразует обращение к charr в &charr[0],Ошибаешься. Компилятор работает по стандарту, а он говорит, что допустимо неявное кастование T[] в T const* и присваивание константых объектов неконстантным, если для них определена семантика присваивания. Поэтому ты и можешь присвоить pch=charr
а при обращении к pch - просто выдает ее содержимое, которое после приравнивания тоже будет содержать &charr[0].Не запутывайся сам, да не запутаешь и других.
Не давай себя запутать!
Что значит "воспринимать как одно и то же"? Что их сущности станут одинаковыми??Я не имел ввиду, что их сущности станут одинаковыми, я имел ввиду, что после приравнивания pch к charr, не будет разницы, обращаешся ли ты к элементам массива через pch или через charr.
. Компилятор работает по стандарту, а он говорит, что допустимо неявное кастование T[] в T const* и присваивание константых объектов неконстантнымЭто несколько абстрактная фраза и, по-моему, она еще не доказывает, что я ошибаюсь. Расскажи, что конкретно происходит при операции charr[3] = 'a'? Как работает компилятор? Ведь он рассчитывает смещение, равное 3 от адреса первого элемента?
Не запутывайся сам, да не запутаешь и других.Извини, если задел, но, мне кажется не стоило говорить, что во всех учебниках про массивы пишут ложь. Так или иначе в них доносится мысль, что имя массива можно воспринимать как указатель на его первый элемент (в некоторых, может быть, это делается плохо). И между int и float аналогия совсем не та.
 . Если бы я заметил это сразу - ничего бы не отвечал.
. Если бы я заметил это сразу - ничего бы не отвечал.aShow() {
cout<<"a: "<<a<<endl;
}
Я не имел ввиду, что их сущности станут одинаковыми, я имел ввиду, что после приравнивания pch к charr, не будет разницы, обращаешся ли ты к элементам массива через pch или через charr.Я так и подумал, но не факт, что так же подумали и другие. Поэтому и обратил твоё внимание на двусмысленность (если не сказать "ошибочность") фразы. Если получилось резковато - каюсь, не хотел.
Цитата: Компилятор работает по стандарту, а он говорит, что допустимо неявное кастование T[] в T *const и присваивание константых объектов неконстантным...
 (хотя, английский тоже приемлем)
 (хотя, английский тоже приемлем) 
выполняется операция operator[](char const*, int) (которая эквивалентна *(operator+(char const *, int))). Неужели, эта операция вызывается по-честному? То есть, при передаче параметров по значению в функцию, в памяти создается временная переменная-указатель, содержащая значение адреса первого элемента и так же копия int. При многократных обращениях к элементам это слегка накладнее, чем operator[](char const*&, int&)
 
  ). Если не поймешь, скажи перепишу. Немного коряво, но работает:
). Если не поймешь, скажи перепишу. Немного коряво, но работает: 
int *array[] = new int*[width];
for (int i=0; i<width; i++)
{
array[i] = new int[height];
// Если надо - инициализация
for (int j=0; j<height; j++)
array[i][j] = 0;
}
 
 Я правильно понимаю что вначале объявляем массив динамических ссылок, а потом их самих объявляем динамическими массивами?
И насколько больше он ест памяти и почему? Объясните незнающему
 .
.  Во втором случае эта переменная особо не нужна (кроме случаев, если необходимо ввести доп. проверку на "невыход" за границы массива), соответственно, упрощается ситуация, когда массив надо вернуть из функции.
 Во втором случае эта переменная особо не нужна (кроме случаев, если необходимо ввести доп. проверку на "невыход" за границы массива), соответственно, упрощается ситуация, когда массив надо вернуть из функции. Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193
Предыдущая тема: не знаю как назвать тему :-)