Welcome to Software Development on Codidact!
Will you help us build our independent community of developers helping developers? We're small and trying to grow. We welcome questions about all aspects of software development, from design to code to QA and more. Got questions? Got answers? Got code you'd like someone to review? Please join us.
Why use an asterisk after a type?
#include<stdio.h>
struct Node{
int data;
struct Node* next;
};
Here I used an asterisk after Node
. What is it used for? What if I don't put any asterisk after Node
(both Node
's are structures)?
Is *ptr
and ptr*
same?
2 answers
Here I used asterisk after Node. Actually, why asterisk used for? What if I don't put any asterisk after Node (Both Node are structure).
It's a pointer.
A pointer, like its name implies, points to an actual object in memory. (More technically, it holds an address to the memory location).
In your Node example, it is necessary because using a plain object is impossible.
Think of a struct like a box. The box has compartments, which hold the items in it. By necessity, the compartment must be smaller than the box itself.
Now, imagine trying to stuff a Node into another Node. This is like trying to stuff a box into a compartment of a box of the same size -- it just doesn't fit.
However, if we use a pointer, we get around that problem. We slip in a piece of paper into the box that says "the next box is over there", so we don't try to stuff boxes in boxes.
Is
*ptr
andptr*
same?
It's not.
The basic syntax to declare a pointer is type * var_name
. The most likely confusion you have is which one is the type, and which one is the variable name.
In struct Node * next
, struct Node
is the type, and next
is the variable name.
In int *ptr;
, int
is the type, and ptr
is the variable name.
Note that spaces are completely irrelevant. int* ptr
is the same as int *ptr
is the same as int * ptr
.
0 comment threads
The *
for variables and not mathematical operators are the pointers.
Assigning a pointer goes this way:
char *text; // string
Here, we assign a pointer named text
and its type is a char
, but alternatively, this is a string.
As for your question, int *ptr
is basically the same as int* ptr
, only being a pointer of an int
, and nothing else. Your given struct Node* next
is the same as struct Node *next
, and I don't think ptr*
even exists, unless it's made as some union
or struct
. struct *Node
wouldn't work likely.
1 comment thread