3

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] ?

1
  • cdecl is your friend. Commented Apr 6, 2011 at 19:36

4 Answers 4

7
  • int x[5] is an array of 5 integers
  • int (*x)[5] is a pointer to an array of 5 integers

When 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.

Sign up to request clarification or add additional context in comments.

Comments

5
  1. int x[5] is an array of 5 ints
  2. int (*x)[5] is a pointer to an array of 5 ints
  3. int* x[5] is an array of 5 pointers to ints

Comments

4
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 ints.

Comments

3
int x[5];

declares an array of five ints.

int (*x)[5];

declares a pointer to an array of 5 ints.

You might find cdecl.org useful.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.