Sadique
Sadique

Reputation: 22841

Problem with declaration of an array of pointers

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

Answers (4)

Joseph Mansfield
Joseph Mansfield

Reputation: 110768

  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

Upvotes: 5

Erik
Erik

Reputation: 91320

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

Upvotes: 7

aschepler
aschepler

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

Upvotes: 4

yan
yan

Reputation: 20992

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.

Upvotes: 3

Related Questions