Модераторы: Daevaorn

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Для начинающих, кто занимаеться по -Е.Л. Шиманович С/С++ 
:(
    Опции темы
Fazil6
Дата 16.11.2006, 18:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1653
Регистрация: 3.5.2006
Где: Минск

Репутация: 35
Всего: 60



да уж.....
это ты ничего не понял. То, что имя массива может использоваться в выражении как константный указатель не означает, что оно является переменной-указателем.
тип 
long[] != long[5] != long * != long * const 
это разные типы
PM MAIL   Вверх
Dov
Дата 16.11.2006, 18:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


аСинизатор
***


Профиль
Группа: Завсегдатай
Сообщений: 1721
Регистрация: 10.5.2003
Где: Эрец-Исраэль

Репутация: 15
Всего: 88



Fazil6, тебе что, на иврите объяснять нужно, по-русски твая-мая не панимай, учи матчасть, не грузи.


--------------------
Тут вечности запах томительный,
И свежие фрукты дешевые, 
А климат у нас – изумительный, 
И только соседи – #уевые. 
                           Игорь Губерман.
PM   Вверх
JackYF
Дата 16.11.2006, 18:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

Репутация: 18
Всего: 162



Fazil6, где отличия между первым и вторым?
А также принципиальные различия с четвертым?


--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
Fazil6
Дата 16.11.2006, 19:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1653
Регистрация: 3.5.2006
Где: Минск

Репутация: 35
Всего: 60



Цитата(JackYF @  16.11.2006,  18:50 Найти цитируемый пост)
Fazil6, где отличия между первым и вторым?А также принципиальные различия с четвертым?

ну с первым вариантом я погорячился...
посмотри что выдаст вот такой код
Код

int nn[] = {0,0,4,4,4};
int *const mmm = nn;
//int **ncm  = &mmm;     // посмотри как скомпиллируется если это разкомментировать (к вопросу
                                        // что const значения не имеет)
cout << nn << "    " << &nn  << "     " << &mmm << "  " << sizeof(nn) << "  " << sizeof(mmm);



Это сообщение отредактировал(а) Fazil6 - 16.11.2006, 19:34
PM MAIL   Вверх
JackYF
Дата 16.11.2006, 19:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

Репутация: 18
Всего: 162



Код

//int *ncm  = &mmm;     // посмотри как скомпиллируется если это разкомментировать (к вопросу
//int *cm  = &nn;            // что const значения не имеет)


Не, нормально? Ты пытаешься присвоить указателю на инт АДРЕС указателя на инт? И что ты после этого хочешь???

mmm и nn уже сами по себе указатели.

Добавлено @ 19:33 
Fazil6, молодец, быстро отредактировал smile

Тебе осталось еще убрать это же самое в выводе.


--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
Fazil6
Дата 16.11.2006, 19:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1653
Регистрация: 3.5.2006
Где: Минск

Репутация: 35
Всего: 60



Цитата

Fazil6, молодец, быстро отредактировал 

Тебе осталось еще убрать это же самое в выводе.

 smile  не убрал, а исправил. Я вот это имел в виду
int **ncm  = &mmm;

Добавлено @ 19:36 
а в выводе тебе что не устраивает?
PM MAIL   Вверх
JackYF
Дата 16.11.2006, 19:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

Репутация: 18
Всего: 162



Код

//int **ncm  = &mmm;     // посмотри как скомпиллируется если это разкомментировать (к вопросу


А вот это уже логично, что скомпилируется... Но что ты этим доказал?

Добавлено @ 19:40 
Да, я теперь понял, что ты хотел сказать... Но, все-таки, что ты этим доказал? из сказанного ранее? Несовместимость каких типов?

Это сообщение отредактировал(а) JackYF - 16.11.2006, 19:38


--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
Fazil6
Дата 16.11.2006, 19:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1653
Регистрация: 3.5.2006
Где: Минск

Репутация: 35
Всего: 60



Цитата

А вот это уже логично, что скомпилируется... Но что ты этим доказал?

как раз не скомпиллируется  smile потому, что mmm объявлен как константный
PM MAIL   Вверх
JackYF
Дата 16.11.2006, 19:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

Репутация: 18
Всего: 162



Понятно, что long* и long* const - разные... а насчет остального что?

Добавлено @ 19:45 
Цитата(Fazil6 @  16.11.2006,  19:41 Найти цитируемый пост)
как раз не скомпиллируется  smile потому, что mmm объявлен как константный 


Мое сообщение относилось к пред. версии твоего поста  smile , то что не скомпилируется, я понял и на всяк пожарный даже проверил.  smile 

Так несовместимость каких типов ты этим доказал? Кроме ( long* != long* const ) ?



--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
Fazil6
Дата 16.11.2006, 19:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1653
Регистрация: 3.5.2006
Где: Минск

Репутация: 35
Всего: 60



Цитата

Да, я теперь понял, что ты хотел сказать... Но, все-таки, что ты этим доказал? из сказанного ранее? Несовместимость каких типов?

я не говорил, что типы несовместимы. Эти типы приводятся друг другу (не во всех комбинациях конечно), но это разные типы. 
А то, что выводися cout показывает, что имя массива - это не int*
PM MAIL   Вверх
JackYF
Дата 16.11.2006, 19:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

Репутация: 18
Всего: 162



Конкретнее: чем отличаются long* const, int[] и int[5]?


Цитата(Fazil6 @  16.11.2006,  19:45 Найти цитируемый пост)
А то, что выводися cout показывает, что имя массива - это не int* 


Да. Это int* const... Потому что:

Код

void my_func( int mas[] )
{
    std::cout << sizeof(mas);
}


Выведет 4.
Код

int nn[] = {0,0,4,4,4};
   int *const mmm = nn;
//int **ncm  = &mmm;     // посмотри как скомпиллируется если это разкомментировать (к вопросу
   // что const значения не имеет)
   std::cout << nn << "    " << &nn  << "     " << &mmm << "  " << sizeof(nn) << "  " << sizeof(mmm);
    my_func( nn );
   return 0;


Я передал тип int[], не так ли? sizeof вернула уже 4, а не 20.

sizeof( int[] ) вообще не сработает, так как int[] - incomplete type.


При любом ИСПОЛЬЗОВАНИИ "типа" int[] комплилятор считает его int* const, и все дела... Отсюда отсуствие принципиальной разницы...



--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
Dov
Дата 16.11.2006, 19:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


аСинизатор
***


Профиль
Группа: Завсегдатай
Сообщений: 1721
Регистрация: 10.5.2003
Где: Эрец-Исраэль

Репутация: 15
Всего: 88



Цитата(Fazil6 @  16.11.2006,  19:45 Найти цитируемый пост)
А то, что выводися cout показывает, что имя массива - это не int*

А что же это по=твоему, и что у тебя cout показывает smile 



--------------------
Тут вечности запах томительный,
И свежие фрукты дешевые, 
А климат у нас – изумительный, 
И только соседи – #уевые. 
                           Игорь Губерман.
PM   Вверх
Fazil6
Дата 16.11.2006, 20:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1653
Регистрация: 3.5.2006
Где: Минск

Репутация: 35
Всего: 60



Цитата

Да. Это int* const... Потому что:
Код

void my_func( int mas[] )
{
    std::cout << sizeof(mas);
}


нет. Все не так. я ведь в выводе использую массив и именно int* const, и выводит разное. Ведь и имя массива и указатель указывают на одно и тоже, но и sizeof и взятие адреса выдают разные результаты для одного и другого. Так почему вывод, что компиллятор считает эти вещи одним типом? Это разные типы.
Теперь по поводу твоей функции my_func.
Передать массив по значению нельзя. Всегда при передаче массива как параметр функции создается временная локальная переменная указатель (в данном случае int*) и инициализируется адресом первого элемента. Причем это не константный указатель.  Поэтому у тебя и получается такой результат

Цитата

При любом ИСПОЛЬЗОВАНИИ "типа" int[] комплилятор считает его int* const, и все дела... Отсюда отсуствие принципиальной разницы...

здрасте! посмотри, что я попросил вывести и как выводится. Где там отсутствие разницы?

Это сообщение отредактировал(а) Fazil6 - 16.11.2006, 20:20
PM MAIL   Вверх
JackYF
Дата 16.11.2006, 20:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

Репутация: 18
Всего: 162



sizeof() - использование?


Цитата(Fazil6 @  16.11.2006,  20:10 Найти цитируемый пост)
ередать массив по значению нельзя. Всегда при передаче массива как параметр функции создается временная локальная переменная указатель (в данном случае int*) и инициализируется адресом первого элемента. Причем это не константный указатель.  Поэтому у тебя и получается такой результат
.

Да, согласен. Неправ.

Ну а то, что адреса указателей разные - так это, по-моему логично... Две переменные не могут иметь однинаковый адрес.

Добавлено @ 20:46 
Цитата(JackYF @  16.11.2006,  19:57 Найти цитируемый пост)
так как int[] - incomplete type.


Такого типа как ТИПА не существует. Его объявление и sizeof() - заморочки компилятора времени компиляции.
Там, где он используется( не адрес берется и не sizeof(), а индексируется с целью получения элементов ), он ничем не отличается от int* const... Вот, по-моему, и все...



--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
Fazil6
Дата 16.11.2006, 20:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1653
Регистрация: 3.5.2006
Где: Минск

Репутация: 35
Всего: 60



Цитата

Ну а то, что адреса указателей разные - так это, по-моему логично... Две переменные не могут иметь однинаковый адрес.

фокус не в этом, а в том, что 
Код

cout << nn << "    " << &nn

выведет одно и тоже, а 
Код

cout << mmm << "   " << &mmm;

выведет значение указателя и адрес, переменной mmm 
Это к разговору о том, что имя массива это переменная, которая хранит адрес первого элемента. Если бы это была переменная, то можно было бы узнать ее адрес.

PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1178 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.