C pointers: what's the difference between stru

2019-09-21 02:06发布

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?

4条回答
趁早两清
2楼-- · 2019-09-21 02:45

They are all identical.

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

查看更多
劳资没心,怎么记你
3楼-- · 2019-09-21 02:50

what's the difference between struc* A, struct *A and struct * 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.

查看更多
一纸荒年 Trace。
4楼-- · 2019-09-21 02:57

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.

查看更多
迷人小祖宗
5楼-- · 2019-09-21 03:03

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!

查看更多
登录 后发表回答