习题集(2)C的考点

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个数字。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值