LINUX.ORG.RU
Ответ на: комментарий от Slavaz

аа, я понял о чём топик, думал что про передачу переменных в функции, а он(топик) про пробелы.

Извините сразу не заметил

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

> Вариант «int* i» синтаксически (случайно) верен, семантически - нет.

Как раз наоборот. int* - это тип, i - имя переменной, их логично разделять.

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

> а если переменных десятки?

Если у вас где-то надо объявить подряд десятки переменных, то это значит только одно - код следует выкинуть и написать заново.

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

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

Можно интерпретировать 'int *i' как значение, хранимое i (*i), имеет тип int.

Кстати, контрпример для твоей аргуминтации хорош: int* i,j. j НЕ имеет типа int*

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

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

Язык должен иметь легко читаемый синтаксис, он должен помогать писать и понимать программы, а не превращать программу в набор головоломных конструкций. Иначе whitespace и brainfuck должны стать обязательными к изучению в универах, а не шутками.

unanimous ★★★★★
()

Никакой разницы. Юзаю оба варианта в зависимости от того, как уже написано в коде или в зависимости от фазы луны.

// комменты не читал

geekless ★★
()

использую только

int *i;
int &j;

ибо действительно, звездочка относится к переменной. стандартный стиль в K&R. Но в С++ почему то чаще используют int* i, возможно от того же Страуструпа. int * i никогда не использовал.

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

int* - это тип, i - имя переменной, их логично разделять.

Звездочка является частью не типа (int), а выражения, имеющего этот тип (*i). Это как раз хорошо видно на примере 'int *a, b'. А вот здесь

typedef int* P;
P a, b;
действительно появляется новый тип - 'int*', приписываемый всем переменным в списке. Здесь уже есть логика в такой записи.

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

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

>cout<<i2<<endl;

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



Верно. Указатель позволяет передать/изменить как бы два «значения»: адрес и то, что находится по этому адресу (это я и пытался продемонстрировать). Ссылка же однозначно позволяет менять только то, что находится по адресу, не давая возможности изменить сам адрес.

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


Да, это почти одно и то же, но всё же есть различия :). Ссылки более безопасны, чем указатели. Ссылка - это фактически второе имя для переменной. Указатель же - это изменяемое хранилище адреса (за исключением const, но и это обходится). При использовании ссылки нет возможности изменить адрес, на который она указывает. Указатель же можно менять по своему усмотрению (иногда и выстрелив в ногу, а иногда получив больше гибкости, нежели чем со ссылками).

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

А, я тебя не совсем понял просто.

...

Еще один спор, что «лучше» или «правильнее»: const int или int const? Сам сторонник второго, ибо оединоображивает весь код, особенно, когда в нем попадаются хитрые типы вроде int const *const *ptr (указатель на константный указатель на константу). Но в чужих исходниках обычно вижу использование первого способа.

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

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

Я например инициализацию вот так делаю int* i(NULL); так что монопенисуально как объявлять

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

А если в проекте наговнокожено Вы тоже вписываетесь в этот стиль и продолжаете ? Я например в такой ситуации пишу в «своем стиле»( имхо не плохом) , пусть лучше говнокодеры смотрят как надо и учатся

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

Это я писал не к int* p; сам так пишу , а к подстраиванию к проекту

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

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

Loki13 ★★★★★
()

В D эту проблему уже решили. Когда уже его какая-нибудь мегакорпорация продвигать начнёт? Неплохой язык в общем-то.

nanoo_linux
()

Мне вот интересней возвращаемые значения-указатели из функций

так

int        *do_something          (void);
...
...
int*
do_something (void)
{

}

или так

int*       do_something           (void);
...
...
int
*do_something (void)
{

}

Кто какой вариант использует?

grassmeister
()

>Я всегда использовал int *i. То же самое наблюдаю в Qt.

А в WebKit стандарт int* i.

Мне больше по душе int *, так как в объявлении

int *a, b;

b - не int*

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

>В D эту проблему уже решили

о_О Мб они также решили проблемы расстановки скобок и табы/пробелы?

annulen ★★★★★
()

Всегда удивляло, что такой язык умудрились сделать мейнстримом.

wxw ★★★★★
()

пишу «int* p», несколько переменных в одной строке не объявляю

aho
()
int* foo;

ибо при объявлении метода класса обычно пишу просто

int foo(int*);
тогда везде всё выглядит одинаково.

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

> Указатель же можно менять по своему усмотрению

man константный указатель.

Кстати референсы не люблю, потому что в точке вызова их не отличить от вызова по значению - надо смотреть сигнатуру функции/определение переменной-ссылки. На этом однажды заимел тупой баг. С тех пор пользуюсь строго указателями для передачи по ссылке.

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

Аха, про отстутствие аргументов у вас я уже писал.

я уже давно понял, что чукча не читатель... иди пиши дальше

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

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

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

эм, ну в данной исторической перспективе у меня возражений нет :)

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

> ибо при объявлении метода класса обычно пишу просто

Умные люди даже в декларациях сигнатур пишут осмысленные имена, потому что программы читают не только роботы.

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

> > Аха, про отстутствие аргументов у вас я уже писал.

я уже давно понял, что чукча не читатель... иди пиши дальше

Отличный аргумент! По делу. И всё объясняет. lmao

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

> > но как ни стараюсь, не могу придумать к чему там твой комментарий.

эм, ну в данной исторической перспективе у меня возражений нет :)

Забавно. Т.е. ты сам понимаешь, что пишешь не совсем адекватно и не потеме?

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

> Диалог был примерно таким:

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

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

- причиной может быть и невнимательность

rival, кто что мог подумать - это одно. Допустим, что человек «подумал» и решил, что переменная имеет тип указатель на что-то. При попытке его разыменовать вылезет фатальная ошибка при компиляции. Если указатель объявили, но не разыменовывают - то будут предупреждения о несовпадении типов (целое/указатель на). Если переменную не используют - то проблем нет вообще. Так понятнее? Думай, что хочешь, но неправильные мысли будут жестоко пресеченны компайлером, и всё попытки свести всё к защите от ошибок - не очень-то и верны.

anonymous
()

int const *p, *p0; поэтому * прощее лепить к переменной.

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

Забавно. Т.е. ты сам понимаешь, что пишешь не совсем адекватно

иди читай о чём разговор был, писатель :)

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

>Он единственный человек на Земле, который так думает?

Его верные последователи пишут

int* i; int* j;

и никогда не ошибаются. А еще - не «оптимизируют» исходники. Все равно компилятор не оценит эти ужимки и прыжки.

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

> Тип у i - указать на int

Учите матчасть. В Си нет типа-указателя. Указатель — это свойство переменной, а не типа. Хотите тип-указатель — вводите его сами через typedef.

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