#include<stdio.h>
#include<stdlib.h>
int main()
{
int *p;
p=(int *) malloc(4);
if(p==NULL)
{
printf("Insufficient memory");
return;
}
printf("Enter a number\n");
scanf("%d",p);
printf("Value of p=%d",*p);
}
1) What happens in background when we do int *p? Can you show a figure about what it does in memory?
2) What happens in memory "p=(int *) malloc(4);" when we run this line? In surface, I've rote memorized, it allocates 4 bytes of memory, but I don't know in detail what happens in background.
3) printf("Enter a number\n");
scanf("%d",p);
I need to store a number in address of p, so should not I do &p instead of just p?
4) Value of p=p isn't it? Why *p? I've again rote memorized *p gives value of p, but I'm not clear about what's going inside memory during this all.
I'm asking these questions knowing I'm wrong because I've tested the code in codeblocks already. It's not to get the correct answer but a way to think to get a correct answer.
If we'd done;
int x=10;
int *p=&x;
I'd understand what's being done here.
It means content of p is initialzed with address of x. Like this:
https://imgur.com/a/7BNzsGO
but I don't understand the above case that I mentioned in question where we are only doing int *p. I find it meaningless. p is a pointer variable. But it contains whose address?
...