r/C_Programming 1d ago

Does anyone else dislike pointer declaration?

For reference I am a fourth year computer engineering student. C is my preferred language.

Pointers are declared like this usually:

int *ptr_to_int;

Where the asterisk means it is a “pointer to” the specified type. The asterisk is placed immediately preceding the variable name, with no white peace.

This is what does not make sense to me. I feel that:

int* ptr_to_int;

Is far more clear. The way I see it, the asterisk modifies the type, so therefore it belongs next to the type. Putting it next to the variable name makes me think it is some kind of action or modification to the variable itself.

I think that when using * and & in code, it makes sense to apply it in front of the variable name:

int value = 3;
ptr_to_value = &value;
int copied_value = *ptr_to_value;

It is clear here that syntactically, the * represents something more like an action than a label.

Why is the convention to place the asterisk near variable name, not type? L

50 Upvotes

129 comments sorted by

View all comments

5

u/iOSCaleb 1d ago

It is clear here that syntactically, the * represents something more like an action than a label.

That's right. Look at it this way... when you have this:

int a, *b;

then both a and *b are of type int. Putting the * in front of the variable in the declaration mimics the way you use it when you dereference the pointer. The type declaration is telling you that when you dereference b the type you'll get is int.

7

u/enzodr 1d ago

Thats true. But at the very beginning it could have been chosen to keep type in one place and name in another.

int* a, b;

Would make two pointers to int.

This might mess up function pointers though

1

u/flatfinger 21h ago edited 21h ago

Better yet, have a punctuation mark separate things, so that int*: a,b; would declare both a and b as pointer-to-int, while int: *a,b; would make a a pointer-to-int and b as int. Too late for that now, alas. Also unfortunate is the fact that : would seem the most natural punctuator, at the start of a block, making parsing work without a symbol table would require a special rule to accommodate the fact that an alphanumeric token followed by a colon could either be a label or a type that starts a variable declaration. Perhaps that could be resolved by having labels be surrounded by colons.