LINUX.ORG.RU

Разницы никакой, но int *i нагляднее.

post-factum ★★★★★
()

зачем писать

int *i;
вместо
int* i;
?

да чтобы ты писал

int *i, *j, *k;

и не написал случАем

int* i, j, k;

и не ошибся

shty ★★★★★
()

Что вы можете сказать по этому поводу?

Могу сказать, что предпочитаю int *i. Аргументация стандартная:

int *p, *q; // оба указатели
int* p, q;  // q не указатель, как мог бы кто-нибудь подумать по той или иной причине
Не думаю, что вопрос заслуживает отдельной темы.

rival ★★
()
Ответ на: комментарий от rival

Именно поэтому я делаю так же. Но Страуструп вещает, что это неверный путь. Ссылку я дал в теме. Он единственный человек на Земле, который так думает?

Obey-Kun ★★★★★
() автор топика
Ответ на: комментарий от Obey-Kun

Смотри примеры ниже, когда сразу несколько переменных объявляешь

different_thing
()

Я отношу * к типу и пишу int*. Я воспринимаю отдельно тип и отдельно имя переменной. Мне так проще парсить глазками код ;)

anonymous
()
Ответ на: комментарий от rival

> int* p, q; // q не указатель, как мог бы кто-нибудь подумать по той или иной причине

Кто-нибудь, не знающий основ языка не должен его трогать ВООБЩЕ.

anonymous
()
Ответ на: комментарий от Reset

> Есть еще третий вариант

Незачёт, есть ещё вариант без пробелов. Встречается у большинства быдлостудентов (вкупе с отстутсвием вменяемой индентации)

anonymous
()

Не слушай тех, кто советует писать int *i, аргументируя это какой-то там наглядностью. Тип у i - указать на int, т.е. должно быть написано int* i. То, что нельзя три указателя объявить как int* i, j, k - это проблема синтаксиса языка (хотя, в любом случае, так переменный объявлять не совсем хорошо - лучше каждую на новой строке). В общем, гнилой это аргумент, имхо.

Дополнительный аргумент: попробуй передать ссылку на указать =)

kulti ★★
()
Ответ на: комментарий от anonymous

> Кто-нибудь, не знающий основ языка не должен его трогать ВООБЩЕ.
Есть еще такой фактор как внимательность.

rival ★★
()
Ответ на: комментарий от Obey-Kun

Но Страуструп вещает, что это неверный путь.

что он там вещает сейчас посмотрим:

The critical confusion comes (only) when people try to declare several pointers with a single declaration:

int* p, p1;	// probable error: p1 is not an int*

Placing the * closer to the name does not make this kind of error significantly less likely.

int *p, p1;	// probable error?

то есть признаёт проблему, но говорит что нафиг такие декларации использовать, и надо объявлять переменные по одной

Declaring one name per declaration minimizes the problem - in particular when we initialize the variables.

простите, но на вменяемую позицию - не катит, просто на обоснование своих привычек задним числом

shty ★★★★★
()
Ответ на: комментарий от kulti

> Не слушай тех, кто советует писать int *i, аргументируя это какой-то там наглядностью. Тип у i - указать на int, т.е. должно быть написано int* i.

Правильно. Плюс ещё лично я держу в голове типы переменных, и воспринимать тип переменной проще, когда тип и имя переменных - разделены.

То, что нельзя три указателя объявить как int* i, j, k - это проблема синтаксиса языка (хотя, в любом случае, так переменный объявлять не совсем хорошо - лучше каждую на новой строке).

Да, лучше по одному объявлению на строку + не забываем про иницализацию переменных в случае надобности. Незачем лепить всё в одну строку.

И, на мой взгляд, так же легко написать int* a, b; как и int *a, b; Обе - валидные конструкции. При попытки использовани b как указателя - вы получите ошибку компиляции. Так что такие проблемы будут найдены и заморачиваться не стоит. Включайте предупреждения и пишите код без них и будет счастье

anonymous
()
Ответ на: комментарий от kulti

> Тип у i - указать на int, т.е. должно быть написано int* i.
Кому должно?

это проблема синтаксиса языка

Которую можно обойти «какой-то там наглядностью».

Не слушай тех, кто советует

Верно, делай так, как принято в том проекте, который собрался править.

rival ★★
()
Ответ на: комментарий от rival

> Кто-нибудь, не знающий основ языка не должен его трогать ВООБЩЕ.

Есть еще такой фактор как внимательность.

что, правда? нет, честно-честно, неужели не на чём фокусировать больше внимание выполняя проект?

shty ★★★★★
()
Ответ на: комментарий от whoami

А теперь скажите, что удобнее:

int *a, b, c;

или

int* a, b, c;

?

это тяжёлая наркомания, писать такие декларации

shty ★★★★★
()
Ответ на: комментарий от kulti

int* i;

Тип указатель на инт.

int *i;

Указатель на тип инт.

Да, логически первое вернее, т.к. поинтер - тоже тип, но и второе вполне прокатит.

different_thing
()
Ответ на: комментарий от shty

> то есть признаёт проблему, но говорит что нафиг такие декларации использовать, и надо объявлять переменные по одной

Потенциальная проблема для нерадивых кодеров. Не знаете, что накодили - ваши проблемы.

простите, но на вменяемую позицию - не катит, просто на обоснование своих привычек задним числом

Прощаю. Вменяемая позиция с точки зрения юзабилити (читаемости) - это субъективная вещь. Обе конструкции валидные с точки зрения языка. Никаких других позиций, кроме как нравится/нет - здесь быть не может. Если вы не понимаете - мне вас жаль. Код пишется для людей. Его должно быть легко воспринимать. Не стоит забывать об этом

anonymous
()
Ответ на: комментарий от shty

> что, правда? нет, честно-честно, неужели не на чём фокусировать больше внимание выполняя проект?
Что сказать-то хотел?

rival ★★
()
Ответ на: комментарий от rival

> > Тип у i - указать на int, т.е. должно быть написано int* i.

Кому должно?

Пиши «in t *i;» Бох с тобой. Делай, как нравится. Пробелы в имени типа - это труЕЪ!

anonymous
()
Ответ на: комментарий от rival

Верно, делай так, как принято в том проекте, который собрался править

++ совсем забыл про это сказать, но зачастую это определяющий фактор

kulti ★★
()

Если описывается переменная, то int *ptr, если просто тип - int*.

Привычка.

staseg ★★★★★
()
Ответ на: комментарий от anonymous

> Делай, как нравится.
Спасибо, что разрешили.

Пробелы в имени типа - это труЕЪ!

А то.

rival ★★
()

В C/C++ я пишу так [code=cpp]int *i, *j, *k;[/code] потому что звёздочка тут относится отдельно к каждой переменной, а, например, в C# так [code=cpp]int* i, j, k;[/code] потому что в нём звёздочка определяет тип.

anonymous
()
Ответ на: комментарий от anonymous

> то есть признаёт проблему, но говорит что нафиг такие декларации использовать, и надо объявлять переменные по одной

Потенциальная проблема для нерадивых кодеров. Не знаете, что накодили - ваши проблемы.

если что, про свой опыт двухстрочных проектов можете не рассказывать :)

Если вы не понимаете - мне вас жаль.

какая драма

Код пишется для людей. Его должно быть легко воспринимать. Не стоит забывать об этом

о чём весь и сказ, странно что Вы этого не поняли сразу

shty ★★★★★
()

В C/C++ я пишу так

int *i, *j, *k;
потому что звёздочка тут относится отдельно к каждой переменной, а, например, в C# так
int* i, j, k;
потому что в нём звёздочка определяет тип.

anonymous
()
Ответ на: комментарий от shty

> если что, про свой опыт двухстрочных проектов можете не рассказывать :)

Ну да, куда мне до тебя. Школьники такие школьники, лишь бы померяться. Аргументов - ноль, а гонору - выше крыши :D

о чём весь и сказ, странно что Вы этого не поняли сразу

Всё-всё, я пасую перед вашим опытом и знаниями. Видимо, месье засабмитил кучу патчей в linux kernel и вообще занимается разработкой на С?

anonymous
()
Ответ на: комментарий от rival

> что, правда? нет, честно-честно, неужели не на чём фокусировать больше внимание выполняя проект?

Что сказать-то хотел?

что внимательность - это важный ресурс для программиста и нефиг его на что попало расходовать, код должен быть максимально очевидным

shty ★★★★★
()
Ответ на: комментарий от anonymous

anonymous

Видимо, месье засабмитил кучу патчей в linux kernel и вообще занимается разработкой на С?

А что, коммитить говнокод в отстойник говнокода - нынче показатель крутости?

anonymous
()
Ответ на: комментарий от anonymous

> А что, коммитить говнокод в отстойник говнокода - нынче показатель крутости?

шити меряет «крутость» количеством строк (по его метрике, необходе более двух-строк). Что делать.

anonymous
()
Ответ на: комментарий от shty

> //obvious fix

Аха, про отстутствие аргументов у вас я уже писал. Всё ровно так, и предполагалось. Удачи в меряниях пиписьками и реализации своих комплекцов. Такое - не лечится :P

anonymous
()
Ответ на: комментарий от shty

> что внимательность - это важный ресурс для программиста и нефиг его на что попало расходовать, код должен быть максимально очевидным

Диалог был примерно таким:
- тут можно по какой-нибудь причине подумать, что указатель есть для второй переменной, хотя его там нет
- отрезать руки тем, кто не знает языка, - анонимус очевидно решил, что причиной может быть только незнание языка
- причиной может быть и невнимательность

Да, важный ресурс, его нельзя тратить на такие мелочи, блаблабла, согласен, но как ни стараюсь, не могу придумать к чему там твой комментарий.

rival ★★
()
Ответ на: комментарий от guilder

я юзаю &.

Qt.

а там помойму везде &

Гм... использовать по принципу 'или-или' немного странно. Это разные языковые конструкции. Аперсанд - это ссылка на переменную, а звёздочка - это указатель на область памяти.

Разница:

#include <iostream>
using namespace std;
int main(void)
{
int i1=10;
int &i2=i1;

i1++;
cout<<i2<<endl;
return 0;
}

Результат:

11

и

#include <iostream>
using namespace std;
int main(void)
{
int *i1=NULL;
int *i2=i1;

i1++;
cout<<i2<<endl;
return 0;
}

Результат:

0

Ссылки невозможно переинициализировать на другую переменную, указатели можно изменять как угодно.

Поэтому выбирать на равных, что использовать (* или &) - это немного странно :)

Или ошибаюсь?

Slavaz ★★★★★
()

Как по-вашему правильно?

int *i;
int a[1];
int f(void);
или
int* i;
int[1] a;
int ()(void) f;
Есть единые правила синтаксиса. Вариант «int* i» синтаксически (случайно) верен, семантически - нет.

unsigned ★★★★
()
Ответ на: комментарий от Slavaz

> cout<<i2<<endl;

Распечатал данные.

i1++;

(второй пример) Увелчиил один адрес.

cout<<i2<<endl;

Распечатал второй адрес.

Или ошибаюсь?

Ага. Вообще ссылки это те же указатели по сути, с немного другой семантикой и синтаксисом. И в кутях кстати говоря используются указатели.

staseg ★★★★★
()
Ответ на: комментарий от staseg

С сильно другой семантикой и немного другим синтаксисом.

Самопофиксился.

staseg ★★★★★
()

стрелочку/амперсанд у имени переменной и только. Ибо int* a, b, c - имеет один указатель и два инта.

yoghurt ★★★★★
()

int *i, но int& i почему-то

Yareg ★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.