Я делаю некоторые исследования, чтобы лучше понять указатели на C, но мне трудно понять их: Является ли «struct * A» указателем на структуру? Тогда что такое 'struct * A'? И я видел, как кто-то писал «int const * a», что это значит?C указатели: какая разница между строками * A, struct * A и struct * A?
ответ
Все они идентичны.
struct *A
= struct* A
= struct*A
= struct * A
.
struct *A
, struct* A
и struct * A
все одно и то же, и все eqaully неправильно, так как вам не хватает имени структуры.
int const *a
- это то же самое, что и const int *a
, и это означает указатель на целочисленное целое число.
Кроме того: int * const a
отличается, и это означает, что указатель const и не const integer.
Нет ничего обязательного «постоянного» относительно объекта 'const'. –
@ Карл: Да, есть. Но наличие указателя на 'const' не означает, что объект является 'const' квалифицированным. –
@BenVoigt, я полностью согласен с вашим вторым утверждением, но 'const' просто означает, что вы не можете изменить это, а не то, что оно постоянно. Это может очень хорошо изменить ценность. –
чем разница между
struc* A
,struct *A
иstruct * A
?
Они эквивалентны (неправильно). C - язык свободной формы, пробел не имеет значения.
struct* A
Указатель на структуру?
Нет, это (по-прежнему) синтаксическая ошибка (struct
- зарезервированное ключевое слово). Если вы замените допустимое имя структуры там, то это будет один, да.
int const * a
, что это значит?
Это объявление a
быть стрелкой к const int
.
Пробел имеет значение. Рассмотрим 'unsigned long Bridge;' vs 'unsigned longBridge;' –
@BenVoigt И также '' hello world ''не то же самое, что' 'helloworld'', конечно. – 2013-04-12 21:29:23
Что-то, что-то, токен ... –
Как уже упоминалось, struct * A
и так далее.
Однако структура и указатель могут быть созданы следующим образом: «? Что такое int const * a
»
/* Structure definition. */
struct Date
{
int month;
int day;
int year;
};
/* Declaring the structure of type Date named today. */
struct Date today;
/* Declaring a pointer to a Date structure (named procrastinate). */
struct Date * procrastinate;
/* The pointer 'procrastinate' now points to the structure 'today' */
procrastinate = &today;
Кроме того, для вторичного вопроса о различных способах, в котором объявляются указатели, здесь пример, который я приспособил от программирования в C, Стивен Г. Кочан:
char my_char = 'X';
/* This pointer will always point to my_char. */
char * const constant_pointer_to_char = &my_char;
/* This pointer will never change the value of my_char. */
const char * pointer_to_a_constant_char = &my_char;
/* This pointer will always point to my_char and never change its value. */
const char * const constant_ptr_to_constant_char = &my_char;
Когда я первый начал, я нашел бы полезным прочитать определение справа налево, substituti g слово «только для чтения» для «const». Например, в последнем указателе я бы просто сказал: «constant_ptr_to_constant_char - это только для чтения указатель на char, который доступен только для чтения». В вашем вопросе выше для int const * a
вы можете сказать: «« a »- это указатель на int-только для чтения. Кажется глупым, но это работает.
Есть несколько вариантов, но когда вы сталкиваетесь с ними, вы можете найти больше примеров, просматривая этот сайт. Надеюсь, это поможет!
'' struct * A == struct * A'' – gongzhitaao
'struct * A' (с любым интервалом) не будет компилироваться, тег struct отсутствует. –