Это неправильно или я что-то упустил (int count = 10, x;) - PullRequest
1 голос
/ 09 января 2010

Наткнулся на этот пример в книге, которую я читаю, и для меня это не имело никакого смысла. Я, наверное, что-то упускаю, но похоже, что вы присваиваете счет со значениями «10», а затем со значением «х» который даже не Int. Просто интересно, если это правильный синтаксис.

Книга гласит:

Переменные count и x объявлены как целочисленные переменные обычным образом. На следующей строке объявлена ​​переменная intPtr типа «указатель на int». Обратите внимание, что две строки объявлений могли быть объединены в одну строку:

int count = 10, x, *intPtr;

вот программа, из которой она взята:

#import <Foundation/Foundation.h>
int main (int argc, char *argv[ ])
{
    NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];

    int count = 10, x;

    int *intPtr;

    intPtr = &count;

    x = *intPtr;

    NSLog (@"count = %i, x = %i", count, x);

    [pool drain];

    return 0;

}

Ответы [ 5 ]

13 голосов
/ 09 января 2010

Это просто декларация. Объявление состоит из начальной части ( спецификатор объявления ), которая описывает «базовую» часть типа, и разделенной запятой последовательности объявлений , каждая из которых объявляет отдельное имя , возможно, модифицирует базовый тип. В C вы можете объявить несколько имен, используя один и тот же спецификатор объявления

int count, x, *intptr;

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

int count;
int x;
int *intptr;

При желании вы можете добавить инициализатор к каждому декларатору или к некоторым из них. Так

int count = 10, x, *intptr;

совпадает с

int count = 10;
int x;
int *intptr;

Это все, что нужно.

3 голосов
/ 09 января 2010

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

int count = 10;
int x;
int *intPtr;
1 голос
/ 09 января 2010

Это общий источник ошибок как для начинающих , так и для опытных C (и C ++) программистов вместе с оператором запятой . Обычная путаница:

int* p, pp;
pp = malloc( sizeof( int ) * N ); /* oops pp is just int, not a pointer */
...
int x;
x = 12, 13, 14; /* and the value of the x is ... */
0 голосов
/ 09 января 2010

Это как

int count, x;

за исключением того, что счет инициализируется до 10

0 голосов
/ 09 января 2010

Запятая означает, что x также является int, а * intPtr также является int (а intPtr является указателем на int) Это как:

Aunts Mary, Jane, Daryl;
Mary is stupid;
Jane is Old;
Daryl is same as Mary;
...