n1 = 6000 n2 = 7000 n3 = 8000 n4 = 9000 For other data types (here int as example) – int * num [ 4 ] , n1 [ 7 ] = { 1,2,3,4,5,6,7 } , n2 [ 9 ] = { 1,2,3,4,5,6,7,8,9 } , n3 [ 6 ] = { 1,2,3,4,5,6 } , n4 [ 7 ] = { 1,2,3,4,5,6,7 } ; // 5000 – 9000 in green fonts are locations. num [ ] = n1 ; num [ 1 ] = n2 ; num [ 2 ] = n3 ; num [ 3 ] = n4 ; // can be accessed as 2-D array with varying sizes of array int ArraySize [ 4 ] = { 7, 9, 6, 7 } ; //size of n1, n2, n3, n4 // Other ways to calculate size are possible (like using sizeof()) for ( int i=0; i< 4 ; i++) { cout << "num[" << i << "] = n" << i+1 << " : " ; for ( int j=0; j<ArraySize[i]; j++ ) cout << num [ i ][ j ] << " " ; // *(num[i]+j) or *(*( num+i )+j)) cout << endl ; } num[0] num[1] num[2] num[3] Array of Pointers 1 2 3 4 5 6 7 1 2 3 4 5 6 7 8 9 1 2 3 4 5 6 1 2 3 4 5 6 7 num [ ]= n1 = 6000 num [ 1 ]= n2 = 7000 num [ 2 ]= n3 = 8000 num [3]= n4 = 9000 OUTPUT: num[0] = n1 : 1 2 3 4 5 6 7 num[1] = n2 : 1 2 3 4 5 6 7 8 9 num[2] = n3 : 1 2 3 4 5 6 num[3] = n4 : 1 2 3 4 5 6 7 num= 5000 5004 5008 5012