Форум: "Прочее";
Текущий архив: 2009.04.19;
Скачать: [xml.tar.bz2];
ВнизДекларирование указателя в Си Найти похожие ветки
← →
Palladin © (2009-02-14 10:23) [0]Раз уж пошла такая пьянка :)
Интересно, есть ли разница между:int* i;
иint *i;
?
← →
Palladin © (2009-02-14 10:24) [1]Пока мое предположение
int* a,b,c; - все три переменных будут указателями
int *a,b,c; - указателем будет только a
← →
benito (2009-02-14 10:30) [2]Palladin © (14.02.09 10:23)
Разница чисто эстетическая. Гораздо веселее использование в этом случае слова const.
const int *a;
int *const a; (int const* a;)
const int *const a; (const int const* a;)
Всего одно слово, а какое богатство форм.
Palladin © (14.02.09 10:24) [1]
Неверно. Указателем будет только a.
← →
Palladin © (2009-02-14 10:36) [3]Спасибо, буду использовать int *a, так куда понятней и с толку не сбивает.
а, const я еще не проходил :)
← →
Anatoly Podgoretsky © (2009-02-14 11:53) [4]> Palladin (14.02.2009 10:23:00) [0]
Есть.
В первом случае пробел после зведочки, во втором до, предлагаю попробовать третий и четвертый варианты
3. без пробелов;
4. с пробелами с обеих сторон.
← →
Anatoly Podgoretsky © (2009-02-14 11:54) [5]> Palladin (14.02.2009 10:24:01) [1]
Я знаю языки, где результат зависит от количество пробелов, но разве к ним отностится СИ?
← →
Anatoly Podgoretsky © (2009-02-14 11:55) [6]> benito (14.02.2009 10:30:02) [2]
Это правостороннее мышление.
← →
isasa © (2009-02-14 12:08) [7]Удивительно.
Как простую операцию "объявление переменной" можно превратить в геморрой.
← →
benito (2009-02-14 12:29) [8]isasa © (14.02.09 12:08) [7]
На самом деле, за этим кроется, внимание.... Фортран.
Рекомендуется объявлять каждую переменную на отдельной строке (даже здравый смысл подсказывает, что лучше делать так, а эта милая вещь с объявлением нескольких переменных на одной строке, видимо, была сделана для любителей Фортрана).
← →
AndreyV © (2009-02-14 12:34) [9]> [8] benito (14.02.09 12:29)
> Рекомендуется объявлять каждую переменную на отдельной строке
> (даже здравый смысл подсказывает, что лучше делать так,
> а эта милая вещь с объявлением нескольких переменных на
> одной строке, видимо, была сделана для любителей Фортрана)
Если смысл их один, зачем плодить строки?
int *a, *b, *c; // Чем не устраивает
← →
benito (2009-02-14 12:39) [10]AndreyV © (14.02.09 12:34) [9]
Это конечно дело вкуса, но если объявлять каждую переменную на отдельной строке, остается место для комментария к каждой переменной.
← →
AndreyV © (2009-02-14 12:58) [11]> [10] benito (14.02.09 12:39)
> AndreyV © (14.02.09 12:34) [9]
>
> Это конечно дело вкуса, но если объявлять каждую переменную
> на отдельной строке, остается место для комментария к каждой
> переменной.
Я вот о чём
> Если смысл их один, зачем плодить строки?
double x, y, z // координаты
double dx, dy, dz // приращения координат
Или
double x; // координата x
double y; // координата y
double z; // координата z
double dx; // приращение координаты x
double dy; // приращение координаты y
double dz; // приращение координаты z
← →
Palladin © (2009-02-14 13:01) [12]Думаю это дело разумности. В паскале, например, три четыре кратконазванных переменных одного типа я в одну строчку определяю, на остальные же, более разумноназванные отдельно строчку для каждой переменной.
← →
Anatoly Podgoretsky © (2009-02-14 13:44) [13]> AndreyV (14.02.2009 12:34:09) [9]
> int *a, *b, *c; // Чем не устраивает
int *a, *b, *c, ... XYZ; // и так все три тысячи переменных.
← →
KSergey © (2009-02-14 13:46) [14]Автор, прочтите учебник!
← →
Palladin © (2009-02-14 14:55) [15]
> KSergey © (14.02.09 13:46) [14]
Какой? Позвольте поинтересоваться. У Кернигана и Ричи нет никакого намека на "гуляние" звездочки. Четко и ясно указано *переменная, без всякого двусмыслия. На это "гуляние" я наткнулся случайно, взглянув на исходник, а тут еще и @!!ex запостил вопрос. Кстати еще не пробовал на gcc ставить звездочку после типа. Вечером дома попробую. Но если ты мне укажешь учебник где написано про "гуляние" звездочки, буду очень благодарен.
← →
Palladin © (2009-02-14 14:56) [16]опять глюк на форуме, сколько раз уже натыкался...
← →
@!!ex © (2009-02-14 15:50) [17]> Кстати еще не пробовал на gcc ставить звездочку после типа.
Нормально все будет. я пробовал.
← →
Канадец (2009-02-14 16:35) [18]
> Palladin © (14.02.09 14:55) [15]
>
>
> > KSergey © (14.02.09 13:46) [14]
>
> Какой? Позвольте поинтересоваться
4.9.2 Declaring Multiple Names
It is possible to declare several names in a single declaration. The declaration simply contains a list
of commaseparated
declarators. For example, we can declare two integers like this:
i n t x , y ; // int x; int y;
Note that operators apply to individual names only – and not to any subsequent names in the same
declaration. For example:
i n t * p , y ; // int* p; int y; NOT int* y;
i n t x , *q ; // int x; int* q;
i n t v [1 0 ], *p v ; // int v[10]; int* pv;
Such constructs make a program less readable and should be avoided.
Bjarne Stroustrup - The C++ Programming Language
← →
palva © (2009-02-14 17:02) [19]Про гуляние звездочки есть такое правило. Пробельные символы допустимы везде, где они не разделяют лексем, то есть имен, чисел, составных знаков операции (вроде ++) и обязательны везде, где они предотвращают слияние двух лексем в одну. Например в операторе
int n = - -4;
первый пробел обязателен, пробел между минусами обязателен, пробел после второго минуса недопустим. А оператор в сабже можно писать вообще без пробелов:
int*i;
← →
Alkid © (2009-02-14 20:12) [20]Кстати, замечу между делом, в C# объявление указателя работает по другим правилам. Там при объявлении
int * a,b,c;
Все три переменные будут объявлены как указатели.
:)
← →
Palladin © (2009-02-15 10:45) [21]
> Канадец (14.02.09 16:35) [18]
Позвольте поинтересоваться. А насколько будет верна информация по Си++ применительно к Си? Или ты их не различаешь?
← →
Канадец (2009-02-15 16:55) [22]
> Palladin © (15.02.09 10:45) [21]
>
>
> > Канадец (14.02.09 16:35) [18]
>
> Позвольте поинтересоваться. А насколько будет верна информация
> по Си++ применительно к Си? Или ты их не различаешь?
Ты пофлеймить хочешь или разобраться в вопросе?
В случае второго: применительно. Если Стауструпа внимательно читать, он указывает на различия (где они есть) с С.
← →
Palladin © (2009-02-15 18:43) [23]
> Канадец (15.02.09 16:55) [22]
В вопросе я уже разобрался, кстати, palv"е спасибо ). Сейчас я хочу пофлеймить по поводу "насколько будет верна информация по Си++ применительно к Си?". Хочешь сказать, что страуструп на самом деле книжку по Си писал, а не по Си++? Каким боком я должен определить, что приведенный тобой фрагмент, справедлив как для Си так и для Си++?
"Гуляние" звездочки это, думаю, всего лишь одно из сотен мелочей, которые слабо описываются в поп. литературе. Сегодня, кстати, все таки нашел довольно серьезную (по крайней мере по разделу "Содержание") книжку "Ричард Хезфилд, Лоуренс Кирби: Искусство программирования на Си".
← →
Asteroid (2009-02-15 19:23) [24]Почитай про гуляние const-а с указателем, море удовольствия :)
По сабжу, в общем-то, уже все сказали. По поводу тонкостей - AFAIK, C++ полностью обратно совместим с C, со всеми тараканами.Так что Страуструпу можно доверять, хоть он и описывает C++ :)
← →
@!!ex © (2009-02-15 19:33) [25]> По поводу тонкостей - AFAIK, C++ полностью обратно совместим
> с C, со всеми тараканами.
Это не совсем так.
Вернее это совсем не так.
С - не является надмножеством С++.
Они два пересекающихся множества, но ни одно не содержит другое целиком.
В этом плане Объектный-С более адекватный.
← →
Канадец (2009-02-15 22:52) [26]
>Palladin © (15.02.09 18:43) [23]
> Сейчас я хочу пофлеймить...
Это без меня пожалуйста.
← →
wicked © (2009-02-16 00:05) [27]
> Вернее это совсем не так.
> С - не является надмножеством С++.
подмножеством....
← →
@!!ex © (2009-02-16 08:12) [28]> [27] wicked © (16.02.09 00:05)
Ну да, опечатался, :)
← →
KSergey © (2009-02-16 10:32) [29]> @!!ex © (15.02.09 19:33) [25]
> В этом плане Объектный-С более адекватный.
и че? задрал ты уже с этим "объектным си". Нет такого языка, умер. Успокойся.
← →
Anatoly Podgoretsky © (2009-02-16 11:15) [30]> KSergey (16.02.2009 10:32:29) [29]
И Ленин всегда молодой и юный Гайдар впереди.
← →
@!!ex © (2009-02-16 13:40) [31]> [29] KSergey © (16.02.09 10:32)
Я его за все время обитания здесь упоминаул в первый раз. ;)
Выпейти успокоительного, плиз.
P.S.
Насчет его смерти - слишком громкое заявление, Mac OS умирать не собирается, а там Obj-C рулит.
← →
Desdechado © (2009-02-16 14:41) [32]Во избежание путаницы и при желании объявлять несколько переменных в строку, указатели пиши в одной строке, простые переменные - в другой, двойные указатели - в третьей и т.д.
← →
Alex Konshin © (2009-02-17 14:09) [33]Нет, во избежании путаницы объяви новый тип
typedef int *LPINT;
LPINT a,b,c;
← →
депутатъ (2009-02-17 20:03) [34]очень смешно получится, если воспользоваться define:
#define LPINT int *
LPINT a, b, c;
← →
@!!ex © (2009-02-17 20:08) [35]> [34] депутатъ (17.02.09 20:03)
вот поэтому народ и боится С++.
Чуть что не учел, программа не работает... хороше если не компилится... а если не правильно работает??
← →
AndreyV © (2009-02-17 20:16) [36]> [35] @!!ex © (17.02.09 20:08)
> > [34] депутатъ (17.02.09 20:03)
>
> вот поэтому народ и боится С++.
> Чуть что не учел, программа не работает... хороше если не
> компилится... а если не правильно работает??
А нефиг в Си++ #define пользоваться.
← →
Skyle © (2009-02-18 06:37) [37]
> @!!ex © (17.02.09 20:08) [35]
> > [34] депутатъ (17.02.09 20:03)
>
> вот поэтому народ и боится С++.
http://www.youtube.com/watch?v=XHosLhPEN3k
← →
@!!ex © (2009-02-18 09:28) [38]> [37] Skyle © (18.02.09 06:37)
Зачетный ролик. :)
Страницы: 1 вся ветка
Форум: "Прочее";
Текущий архив: 2009.04.19;
Скачать: [xml.tar.bz2];
Память: 0.54 MB
Время: 0.045 c