Эта линия устанавливает две переменные или только одну? - PullRequest
1 голос
/ 24 мая 2011
int i, nhashprime = nextprime(2 * hashprime) ;

Эта строка равна

int i, nhashprime;
i = nextprime(2 * hashprime);
nhashprime = i;

или она делает что-то еще?

Ответы [ 5 ]

6 голосов
/ 24 мая 2011

Нет. Ваш код устанавливает только nhashprime. i будет неинициализировано.

5 голосов
/ 24 мая 2011
int i, nhashprime = nextprime(2 * hashprime);

означает

int i;
int nhashprime = nextprime(2 * hashprime);
3 голосов
/ 24 мая 2011

Это инициализирует nhashprime, а не i. Партия int применяется как к i, так и к nhashprime, но назначение относится только к nhashprime. Код эквивалентен

int i;
int nhashprime = nextprime(2 * hashprime);

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

int i, j, k;

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

int *p, i;

следует избегать и эквивалентно

int *p;
int i;
1 голос
/ 24 мая 2011

(Карл опубликовал правильный ответ. Я публикую его как ответ, а не комментарий только для сохранения форматирования.)

int i, nhashprime = nextprime(2 * hashprime);

эквивалентно:

int i;
int nhashprime = nextprime(2 * hashprime);
0 голосов
/ 24 мая 2011

Первый просто установить nhashprime, оставляя i неопределенным.Конечно, если hashprime не определено (я не вижу никакой прецедентной инициализации), то, вероятно, также nhashprime будет неопределенным.

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