Following is a list of important points people find very
convenient to forget. This is the first article of a series
· For bitwise operations, operand is promoted to
"int" before evaluation.
unsigned char I = 0x80;
printf("%d", i<<1 nbsp="nbsp"> 2561>
printf("%d", i<<1 nbsp="nbsp"> 2561>
· printf(5 + "intelligent"); => “ligent”
Number specifies displacement to string pointer. This is the
same as doing…
char *s = "intelligent";s += 5;
printf("%s",s);
· In a switch statement, initializations are
allowed in the beginning, but they are NOT EXECUTED. The control is passed
directly to an executable statement, i.e. matching case statement.
switch(1)
{
printf("hello"); => NOT PRINTED
case 1:printf("case 1");break;
case 2:printf("case 2");break;
}
{
printf("hello"); => NOT PRINTED
case 1:printf("case 1");break;
case 2:printf("case 2");break;
}
· The ++ operator means ``add one to a variable''
and DOES NOT work with constants.
int i = ++ 3 ;
printf("%d", i); => GARBAGE VALUE
printf("%d", i); => GARBAGE VALUE
· Static arrays are constant! The base address
cannot be modified. Any pointer arithmetic that attempts to do so causes a
compilation error.
int arr[ 10 ] ; => “arr” is a constant. It is defined to be
the address, &arr[ 0 ].
· Array pointer logic for an array, “int a[10][10];”
a+1
=> a[1]
=> &a[1][0]
=> a[1]
=> &a[1][0]
· In pointer arithmetic, addition and subtraction
are valid operations, (as long as they don’t try to change the base address of
the pointer) but pointer division and pointer multiplication are INVALID.
No comments:
Post a Comment