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.