Monday, 15 April 2013

c - treating an array as a single variable -



c - treating an array as a single variable -

code 1:

. . int main() { char ch1[3]; ch1[0]=ch1[1] = null; ch1[2]=0x01; ch1[2] = ch1[2]<<2; printf("%u", ch1[2]); system("pause"); homecoming 0; } . .

the output of code:1 4 (as expected).

code 2:

. . int main() { char ch1[3]; ch1[0]=ch1[1] = null; ch1[2]=0x01; *ch1 = *ch1<<2; printf("%u", ch1[2]); system("pause"); homecoming 0; } . .

but output of code:2 1 not expected! in line 6 of code:2, modification done changing ch1[2] = ch1[2]<<2; *ch1 = *ch1<<2;. have tried treating char array 1 numerical value , have done << operation; believe method incorrect. there right method treat array single numerical value basic mathematical operations?

update 1:

i have changed code following:

int main() { char ch1[3]; ch1[0]=ch1[1] = null; ch1[2]=0x01; *(ch1+2) = *(ch1+2)<<9; printf("%u", ch1[1]); system("pause"); homecoming 0; }

now output:0. shouldn't getting output 2 (i.e. 2^(9-8))? still, how treat array single numerical value?

right; actual question if possible treat array single value or not; considering ch1[0], ch1[1], ch1[2] single block of memory of 24 bits.

the type of pointer important ch1 similar pointer char- char*. when *ch1 refering char ch1 pointing at. if want treat entire array number need cast integer, problematic because array has 3 bytes, , integer has 4, top byte of x in illustration below pointing at, undefined

int main() { char ch1[3]; ch1[0]=ch1[1] = 0; ch1[2]=0x01; int *x = (int*)ch1; *x <<= 2; printf("%u", ch1[2]); system("pause"); homecoming 0; }

c arrays pointers operators

No comments:

Post a Comment