in Puzzles
2,580 views
1 vote
1 vote
main()
 {
     int arr2D[3][3];
     printf("%d\n", ((arr2D==* arr2D)&&(* arr2D == arr2D[0])) );
 }
in Puzzles
2.6k views

1 Answer

3 votes
3 votes
Best answer

 

The name arr2D refers to the beginning of all the 3 arrays containing 3 integer each.

*arr2D refers to the start of the first 1D array (of 3 integers) that is the same address as arr2D.

So the expression (arr2D == *arr2D) is true (1).

Similarly, *arr2D is nothing but *(arr2D + 0). Again arr2D[0] is the another way of writing *(arr2D + 0).

So the expression (*(arr2D + 0) == arr2D[0]) is true (1). 

Ans- 1 && 1 = 1

selected by

4 Comments

how is this expression (arr2D == *arr2D)  true

arr2D gives the base address of the array whereas *arr2D gives the value at the base address since we can write it as *(arr2D+0) 

0
0

1st statement should be false..

arr2D is an address( we know array name is mnemonic for address, here it represent base address) and *aar2D is a pointer to array because of deferencing it will contain value inside the address...so both should not be equal ryt???

0
0

arr2D contains address *arr2D points first  elem location's singledim sub array so both are same

0
0

Related questions