A 宏理解
程序中定义以下宏 #define S(a,b) a*b,若定义 int area; 且令area=S(3+1,3+4),则变量area的值为:(10)
3+1*3+4=10
宏替换只形式上替换要想当area=(3+1)*(3+4) C语言里用宏容易出错地方
B 二维数组理解
若有定义:int a[3][4];不能表示数组元素a[1][1]的是(D)
A *(a[1]+1) B *(&a[1][1]) C (*(a+1))[1] D *(a+5)
二维数组中,a+i代表的是第i行的首地址,和a[i]的含义一样,要注意的是*(a+i)代表的也是第i行的首地址,所以a+i,a[i],*(a+i)三者是等价的。
这样在以上选项中,
A中的a[1]+1代表第1行第一列的地址,所以*(a[i]+1)是a[1][1]
B中的很明显是a[1][1]
C中*(a+1)即是a[1],所以*(a+1)[1]和a[1][1]等价
D中*(a+5)是第五行的首地址,并不是数组中的值
C 改错 unsigned char理解
void main()
{
unsigned char c;
for (c=0;c<255;c++) //c<256死循环,c=255时再+1即0,0~255 改才c!=255跳出 此时c<255 VS c!=255 一样效果
{
printf("c= %d",c); //如按照%c打印可以 0x30~~0x7a 可显示字符;按照数字打印0~254
printf("\n");
}
getchar();
}
首先在内存中,char与unsigned char没有什么不同,都是一个字节,唯一的区别是,char的最高位为符号位,因此char能表示-128~127, unsigned char没有符号位,因此能表示0~255,这个好理解,8个bit,最多256种情况,因此无论如何都能表示256个数字。