Reputation: 22841
When i execute this code
#include<stdio.h>
int main() {
int (*x)[5];
printf("\nx = %u\nx+1 = %u\n&x = %u\n&x + 1 = %u",x,x+1,&x,&x+1);
}
This is the output in C or C++:
x = 134513520
x+1 = 134513540
&x = 3221191940
&x + 1 = 3221191944
Please explain. Also what is the difference between:
int x[5]
and int (*x)[5]
?
Upvotes: 3
Views: 581
Reputation: 110768
int x[5]
is an array of 5 intsint (*x)[5]
is a pointer to an array of 5 intsint* x[5]
is an array of 5 pointers to intsUpvotes: 5
Reputation: 91320
int x[5]
is an array of 5 integersint (*x)[5]
is a pointer to an array of 5 integersWhen you increment a pointer, you increment by the size of the pointed to type. x+1
is therefore 5*sizeof(int)
bytes larger than just x
- giving the 8048370
and 8048384
hex values with a difference of 0x14, or 20.
&x
is a pointer to a pointer - so when you increment it you add sizeof(a pointer)
bytes - this gives the bf9b08b4
and bf9b08b8
hex values, with a difference of 4.
Upvotes: 7
Reputation: 72483
int (*x)[5];
declares a pointer to an array.
From the question title, you probably want
int* x[5];
instead, which declares an array of pointers.
int x[5];
declares a plain old array of int
s.
Upvotes: 4