Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 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
2-1235763470
VoznikVopros
2009-02-27 22:37
2009.04.19
Как эффективно работать с TCategoryPanel (Delphi 2009)?


2-1235708177
sco
2009-02-27 07:16
2009.04.19
TImage и прорисовка (не про DoubleBuffered)


2-1235826463
Nazarius
2009-02-28 16:07
2009.04.19
как в memo написать в определенную строчку


2-1235393881
aha
2009-02-23 15:58
2009.04.19
как изобразить петлю гистерезиса , то есть такая задача


1-1210841777
lead-in
2008-05-15 12:56
2009.04.19
динамическое создание отчётов в FastReport





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский