Hi, I have problem putting a value to 16 bits variable. Here is, how I am doing it.

typedef unsigned int UINT;
typedef UINT* ID_PTR;

unsigned short int myclass[5];
const ID_PTR  arr16_bit[5] = {
                               (UINT*) &myclass[0],
                               (UINT*) &myclass[1],
                               (UINT*) &myclass[2],
                               (UINT*) &myclass[3],

Now accessing the myclass like this.

*(*(arr16_bit + 2)) =  65000;

I can access the array, but the 65000 is cut to 8 bits. Why?


how did you decide this is the case?

and how big is your "int"?

Sorry dude, but it accesses fine (for the case you gave).

   *(*(arr16_bit + 2)) =  65000; 
   cout << dec << **(arr16_bit + 2) << " " << *arr16_bit[2] << endl;

You'll probably find that using a pointer to a 32bit int to write to a 16bit int overwrites the next 16bit int. i.e. Make sure you access 16bit numbers with a pointer to a 16bit number.

So use typedef unsigned short int UINT; (Note the addition of 'short').

Thanks, This solved the problem.

unsigned int* ptr =(unsigned int *)*(arr16_bit + 5);
 *ptr = 10000;