I'm doing some researches to better understand pointers in C, but I'm having a hard time understanding these: Is 'struct* A' a pointer on a structure? Then what is 'struct *A'? And I've seen someone writing 'int const * a', what does this mean?
问题:
回答1:
what's the difference between
struc* A
,struct *A
andstruct * A
?
They're equivalent(ly wrong). C is a free-form language, whitespace doesn't matter.
Is
struct* A
a pointer on a structure?
No, it's (still) a syntax error (struct
is a reserved keyword). If you substitute a valid structure name in there, then it will be one, yes.
int const * a
, what does this mean?
This declares a
to be a pointer to const int
.
回答2:
struct *A
, struct* A
and struct * A
are all the same thing and all eqaully wrong since you're missing the struct's name.
int const *a
is a the same as const int *a
and it means pointer to a const integer.
Aside: int * const a
is different and it means const pointer and a non const integer.
回答3:
They are all identical.
struct *A
= struct* A
= struct*A
= struct * A
.
回答4:
As others have already mentioned, struct * A
et cetera are incorrect but identical.
However, a structure and a pointer can be created in the following manner:
/* 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;
Also, for your secondary question about the different ways in which pointers are declared, "What is int const * a
?", here is an example that I adapted from Programming in C, by Stephen G. Kochan:
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;
When I first got started, I would find it helpful to read the definition from right to left, substituting the word 'read-only' for 'const'. For example, in the last pointer I would simply say, "constant_ptr_to_constant_char is a read-only pointer to a char that is read-only". In your question above for int const * a
you can say, "'a' is a pointer to a read-only int". Seems dumb, but it works.
There are some variations but when you run into them, you can find more examples by searching around this site. Hope that helps!