In this code at line number 7, 'p' is a 1D pointer then how come at the print statement it is being considered as 2D pointer ? and when we do 'a+1' then it would cross whole array. I am not able to understand this code. Please explain. Expected output is
1 1 1 1
2 3 2 3
3 2 3 2
4 4 4 4
But I am getting
1 1 1 1
2 2 2 2
2 2 2 2
3 3 3 3

``````#include<stdio.h>

int main()
{
static int a={1,2,3,4};
int i,j;
static int *p[]={(int*)a, (int*)a+1, (int*)a+2};

for(i=0;i<2;i++)
{
for(j=0;j<2;j++)
{
printf("%d %d %d %d \n", *(*(p+i)+j), *(*(j+p)+i), *(*(i+p)+j), *(*(p+j)+i));
}
}
}
``````

Order of operations, my friend. `(int*)a + 1` converts `a` to a pointer to int, then increments it as a pointer to int. What you wanted, according to your expected output, was to increment `a` first, then convert to a pointer to int:

``static …``

## All 6 Replies

Order of operations, my friend. `(int*)a + 1` converts `a` to a pointer to int, then increments it as a pointer to int. What you wanted, according to your expected output, was to increment `a` first, then convert to a pointer to int:

``````static int *p[] = {(int*)a, (int*)(a + 1), (int*)(a + 2)};
``````

Notice the parentheses around `a + 1` and `a + 2`.

``````*(*(p+i)+j)
``````

P is 1D pointer but here being treated as 2D ?

`p` is an array of pointers. `*(p+i)` could be written as `p[i]` and `*(p[i] + j)` could likewise be written as `p[i][j]`. (So `*(*(p+i)+j)` could be written as `p[i][j]`) (and the contents of `p` are offsets off `a` which is 2-dimensional)

So you could write that `printf` as: `printf("%d %d %d %d \n", p[i][j], p[j][i], p[i][j], p[j][i]);`.

You could also declare the array `a` as `static int a={1,2,3,4};`.

You could see
`p` as `{1, 2, 3, 4}`
`p` as `{2, 3, 4}`
`p` as `{3, 4}`
`p` as `{4}`

You loops request

`p`, `p`, `p`, `p`,
`p`, `p`, `p`, `p`,
`p`, `p`, `p`, `p`,
`p`, `p`, `p`, `p`

which results in:

``````1, 1, 1, 1
2, 2, 2, 2
2, 2, 2, 2
3, 3, 3, 3
``````

Thanks a ton Gonbe :)

Be a part of the DaniWeb community

We're a friendly, industry-focused community of 1.21 million developers, IT pros, digital marketers, and technology enthusiasts learning and sharing knowledge.