Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2009.04.19;
Скачать: CL | DM;

Вниз

Декларирование указателя в Си   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.56 MB
Время: 0.018 c
15-1235162649
alex-drob
2009-02-20 23:44
2009.04.19
Вопрос по сокетам в java


2-1236233045
vat
2009-03-05 09:04
2009.04.19
Искажение больших картинок


2-1235825209
Карим Ли
2009-02-28 15:46
2009.04.19
Записать картинку в БД


6-1202301817
dreamse
2008-02-06 15:43
2009.04.19
Вопрос про испорченую кодировку при скачивании файла по Http


3-1213711617
Георгий
2008-06-17 18:06
2009.04.19
dbgrid - выделить запись которая находится под курсором мыши