2013-04-12 2 views
-1

Я делаю некоторые исследования, чтобы лучше понять указатели на C, но мне трудно понять их: Является ли «struct * A» указателем на структуру? Тогда что такое 'struct * A'? И я видел, как кто-то писал «int const * a», что это значит?C указатели: какая разница между строками * A, struct * A и struct * A?

+0

'' struct * A == struct * A'' – gongzhitaao

+3

'struct * A' (с любым интервалом) не будет компилироваться, тег struct отсутствует. –

ответ

0

Все они идентичны.

struct *A = struct* A = struct*A = struct * A.

2

struct *A, struct* A и struct * A все одно и то же, и все eqaully неправильно, так как вам не хватает имени структуры.

int const *a - это то же самое, что и const int *a, и это означает указатель на целочисленное целое число.

Кроме того: int * const a отличается, и это означает, что указатель const и не const integer.

+0

Нет ничего обязательного «постоянного» относительно объекта 'const'. –

+0

@ Карл: Да, есть. Но наличие указателя на 'const' не означает, что объект является 'const' квалифицированным. –

+0

@BenVoigt, я полностью согласен с вашим вторым утверждением, но 'const' просто означает, что вы не можете изменить это, а не то, что оно постоянно. Это может очень хорошо изменить ценность. –

6

чем разница между struc* A, struct *A и struct * A?

Они эквивалентны (неправильно). C - язык свободной формы, пробел не имеет значения.

struct* A Указатель на структуру?

Нет, это (по-прежнему) синтаксическая ошибка (struct - зарезервированное ключевое слово). Если вы замените допустимое имя структуры там, то это будет один, да.

int const * a, что это значит?

Это объявление a быть стрелкой к const int.

+1

Пробел имеет значение. Рассмотрим 'unsigned long Bridge;' vs 'unsigned longBridge;' –

+1

@BenVoigt И также '' hello world ''не то же самое, что' 'helloworld'', конечно. – 2013-04-12 21:29:23

+0

Что-то, что-то, токен ... –

0

Как уже упоминалось, 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-только для чтения. Кажется глупым, но это работает.

Есть несколько вариантов, но когда вы сталкиваетесь с ними, вы можете найти больше примеров, просматривая этот сайт. Надеюсь, это поможет!