What is the difference between int* ptr and int *ptr in C?

anpatel picture anpatel · Oct 17, 2011 · Viewed 15k times · Source

I am fairly new at C and I don't know the difference between the following two variable declarations:

int* ptr;
int *ptr;

I think that in the declaration int* ptr;, ptr's value cannot be changed whereas it can be changed for the declaration, int *ptr;

I am not sure if that is it though.

What is the concept behind the two declarations?

Answer

Andy Thomas picture Andy Thomas · Oct 17, 2011

To the compiler, there is no difference between the two declarations.

To the human reader, the former may imply that the "int*" type applies to all declarations in the same statement. However, the * binds only to the following identifier.

For example, both of the following statements declare only one pointer.

int* ptr, foo, bar;
int *ptr, foo, bar;

This statement declares multiple pointers, which prevents using the "int*" spacing.

int *ptr1, *ptr2, *ptr3;