Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Не понимаю азов си


Автор: Надежда 18.11.2005, 16:05
Помогите разобраться в чужом листинге.

1. Какие значения будут переданы функции f в вызове f((z=1,z+2))?
2. Чтотакое ? int a особое обьявление??
3.Можно ли массиву int C[7][2] сделать С[4]=C[5]?
4. Какое смысловое значение имеет '\n'+'\n'?
5. Что такое F().g() и с чем это едят?
6. Что означает выражение int (*f)()=x и для какой функции будет коректно выражение f()=0;


Жду вашей помощи!

Автор: Neitron 18.11.2005, 16:19
Цитата
1. Какие значения будут переданы функции f в вызове f((z=1,z+2))?

Аналогично по-видимому что это f(1,3);
Цитата
2. Чтотакое ? int a  особое обьявление??

Это не особое объявление, и вообще не объявление. Это определение.
Цитата
3.Можно ли массиву int C[7][2] сделать С[4]=C[5]?

Нет, точнее можно все, но желаемого результата (приравнять строки?) не получится.
Цитата
4. Какое смысловое значение имеет '\n'+'\n'?

Смысловое значение этого - сложение двух чисел. Число зависит от того какой код имеет сиивол в кавычках. В данном случае результат выполнения этой операции будет 20.
Цитата
5. Что такое F().g()  и с чем это едят?

Ф-ция F возрвщает объект или указатель на него, в которой имеется ф-ция g()
Цитата
6. Что означает выражение int (*f)()=x и для какой функции будет коректно выражение f()=0;

Это выражение означает определения указателя на ф-цию возвращающаю int с последующей инициализайцией ф-цией x
Ф-ция f и x будут указывать на один и тот же участок памяти.

Автор: S.A.P. 18.11.2005, 16:39
Цитата(Neitron @ 18.11.2005, 16:19)
Аналогично по-видимому что это f(1,3);
запятая в скобках - это операция следования. На самом деле это плохой код, по идее должно быть 3, но не факт.

Цитата
и для какой функции будет коректно выражение f()=0;
если не ошибаюсь, то для виртуальной.

Добавлено @ 16:40
Цитата
2. Чтотакое ? int a особое обьявление??

не совсем понял.

Автор: maxim1000 18.11.2005, 17:54
Цитата
f()=0;

в коде: для той, которая возвращает ссылку, например, на int...
ну и при объявлении виртуальной, но про это уже сказали...
Добавлено @ 17:57
Цитата
запятая в скобках - это операция следования. На самом деле это плохой код, по идее должно быть 3, но не факт.

особо не уверен, но, ИМХО, зесь неопределенное поведение
никто не гарантирует последовательность вычисления аргументов функции
а оператором следования это было бы, если бы функция принимала только один аргумент... и то в этом случае нужно было бы писать доп. скобки: f((something,something2))

Автор: S.A.P. 18.11.2005, 18:05
Цитата(maxim1000 @ 18.11.2005, 17:54)
а оператором следования это было бы, если бы функция принимала только один аргумент... и то в этом случае нужно было бы писать доп. скобки: f((something,something2))
так там и написаны дополнительные скобки smile .

Добавлено @ 18:07
Правда я не совсем уверен, что там неопределенное поведение, наверное все таки для операции следования порядок строго определен... Или нет?

Автор: Neitron 18.11.2005, 18:20
Ой))) А я и не заметил скобки=)))))

Автор: chipset 18.11.2005, 18:23
Пожалуйста, впредь каждый вопрос помещайте в отдельную тему.

Автор: maxim1000 18.11.2005, 18:32
Цитата
так там и написаны дополнительные скобки

да... чего-то пропустил smile
тогда, насколько я понимаю, порядок вычислений фиксирован...

Автор: AISIN 18.11.2005, 18:33
Цитата(Perchilla @ 18.11.2005, 16:39)
если не ошибаюсь, то для виртуальной.
Точнее для чисто виртуальной функции. Если чисто виртуальную функцию объявить то для дкласса нельзя создавать объекты.

Добавлено @ 18:34
int сокращенно от integer

Автор: DeadSoul 18.11.2005, 23:37
Цитата
1. Какие значения будут переданы функции f в вызове f((z=1,z+2))?

Зависит от компилятора(и версии). В общем случае это неопределенное поведение
Цитата
3.Можно ли массиву int C[7][2] сделать С[4]=C[5]?

Нельзя. C[4] имеет тип int* const

Автор: Guest 19.11.2005, 00:01
Цитата

Цитата 
5. Что такое F().g()  и с чем это едят?

Ф-ция F возрвщает объект или указатель на него, в которой имеется ф-ция g()



Ф-ция F() возрвщает объект в котором имеется ф-ция g() , но НЕ указатель на объект, если бы был указатель на объект, то было бы F()->g()

Автор: sergejzr 19.11.2005, 00:19
Модератор: Название темы должно отражать ее суть!

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)