2013-07-18 4 views
0

В случае объявления;Я не понимаю, почему статический критерий, примененный к x здесь?

const int *p; 

спецификатор const применяется к int т.е., объект p указывает.
в связи с заявлением (ИЮНЬ 1998 ГОДА, ПРОГРАММИРОВАНИЕ ПРОГРАММИРОВАННЫХ ПОМЕЩЕНИЙ);

Некоторые спецификаторы декларации не вносят вклад в тип идентификатора declarator-id. Кроме того, они определяют другую семантическую информацию, которая применяется непосредственно к идентификатору объявления. Так, например, в:

static unsigned long int *x[N]; 

ключевое слово static не относится к unsigned long int объектов, указатели в x точки к. Скорее всего, это относится и к x себе:

--------------------------- 
/ \     /\ 
static unsigned long int * x [N]; 

Это заявляет, что x является статического объектом типа «массив из N элементов указателя на неподписанный долгий Int.»

Я не понимаю, почему static применяется к x?

+1

Можете ли вы представить, чтобы применить 'static' к' unsigned long int * ', но не к' x'? Если ответ «нет», то порядок не имеет значения, потому что 'static' и' const' - две разные вещи. В случае 'const' это другое:' const int * p' не совпадает с 'int * const p'. –

+0

Что бы вы ожидали от этого? –

+2

Переменная 'x' имеет тип массива (это' unsigned long * [n] 'часть, точнее это массив указателей' n' для unsigned long. Однако 'static' не имеет ничего общего с типами: it означает класс * хранения * '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ' http://stackoverflow.com/questions/562303/the-definitive-c-book-guide-and-list –

ответ

1

статический не имеет смысла применять к типу. static применяется к месту хранения/видимости x (в зависимости от того, где его объявлено)

1

Спецификаторы и типы спецификаторов класса хранения - это совершенно разные вещи. Тип классификатор (const, volatile или restrict) является частью типа, тогда как спецификаторы класса памяти (typedef, extern, static, auto или register) является частью декларации.

Если вы имеете в виду C99, см 6.7.1 Хранение класса спецификаторов и 6.7.3 Тип отборочные.

Смежные вопросы