|
|
|
| Здравствуйте.
1. Как лучше написать функцию?
char * f(char *s = "Moia stroka")
{
return s;
}
|
или
const char * f(char *s = "Moia stroka")
{
return s;
}
|
2. Что значит char *s в заголовке. Создается указатель *s на некоторое значение? Тогда почему нельзя к нему обратится return *s? Или это только значит то, что параметр s передается по указателю и в теле функции ее следует писать без звездочки? | |
|
|
|
|
автор: heed (16.11.2009 в 11:57) |
|
|
для: antf
(14.11.2009 в 08:53)
| | немного смогу что-то попробовать объяснить только по поводу .2
>Создается указатель *s на некоторое значение? Тогда почему нельзя к нему обратится return *s?
На самом деле в функции передаются как параметры только указатели.
В 32х-битной сиистеме указатель обычно 4 байта или 32 бита это просто величины смещения начала данных в байтах.
Все эти указатели просто копируются в стэк , откуда они будут приниматься функцией
, и передаётся управление по такому-же указателю на функцию
А возвращаются функциями в 32х-битной системе тоже только 4 байта,
вернее не столько возвращаются сколько в регистр процессора просто копируется код ошибки или 0-код успешного выполнения, или указатель на данные которые нужно вернуть.
, сами данные можно вернуть, если они умещаются в 32х-битное int
или те-же 4байта (в 32х-битной системе)
Нельзя написать return *s; потомучто так реализовано в Си.
Компилятор просто не поймёт чего от него хотят.
>Что значит char *s в заголовке
это определяет для компилятора что должно быть в регистре процессора после успешного выполнения функции. (что функция возвращает как говорят)
В виндовс и многих других системах используется регистр eax, по смыслу обозначения 32x-битный регистр-аккумулятор. Самый часто-используемый.
И некоторые операции с ним могут быть немного быстрее чем с остальными регистрами, взависимости от типа архитектуры процессора.
по поводу .1
const определяет данные как нужные только для чтения.
По поводу отличий скомпилированного кода с такими двумя способами не скажу точно
, возможно их нет, кроме того что у компилятора будет возможность ругаться по большему колличеству поводов :) | |
|
|
|