jingo
jingo

Reputation: 1074

Strange (for me) behavior of pointers

I'm reading about pointers, but i'm confused about their nature. Here is what I mean.

int x = 4;

//Here I declare p as integer pointer
int *p;

// Here I assign memory address of x to pointer p
p = &x;

// The line below prints result 4 which is expected. If I miss asterisk before p I'll get memory address instead of data which that memory address holds.
printf("%d", *p)

Summarizing when asterisk is mising before pointer it "points" to memory address. If asterisk preceded pointer it "points" to actual data. So far so good.

But why that segment of code works correctly ?

int someIntVariable = 10;

const int *p = &someIntVariable;
printf("%d", *p);

If I miss asterisk the compiler gives me an warning " warning: initialization makes integer from pointer without a cast"

I expected p (if the compiler allows me to use p without asterisk) to hold memory address of someIntVariable instead of it's "value";

What is happening here ?

Upvotes: 1

Views: 108

Answers (4)

niko
niko

Reputation: 9393

I belive you got the warning:initialization makes integer from pointer without a cast, when you tried these way

int someIntVariable = 10;  
const int p = &someIntVariable;
printf("%d", p); 

What your trying to do is , Your assigning a address to a normal variable and your expecting it to work but that is not how the normal variables used thats why pointers came into act to do that job and your trying to replace a pointer with normal variable

I still did not find the real answer to it but Just check out these question that I asked I wonder what really the &a returns?

Upvotes: 0

Ed Heal
Ed Heal

Reputation: 60027

The const int * is a datatype - i.e. pointer to a const int. p is the name of the variable. It is on the LHS.

When asterik is on the RHS it has a different meaning. It means dereference.

Upvotes: 0

Jan S
Jan S

Reputation: 1837

Here you are declaring a pointer and assigning a value to the pointer in one step. It is equivalent to the following code:

const int *p;
p = &someIntVariable;

Here the * is not used as a de-referencing operator. It is used in the context of pointer declaration.

Upvotes: 2

cnicutar
cnicutar

Reputation: 182714

In the declaration:

const int *p = &someIntVariable;

The asterisk is not the dereference operator. It simply states p is a pointer. That line has the same effect as

const int *p;
p = &someIntVariable;

Upvotes: 9

Related Questions