以下程序的k最终值是:
int i = 10;
int j = 20;
int k = 3;
k *= i + j;
解法:
考虑优先级,+的优先级高于 *= ;
计算为 k = k * (i + j); 答案是90
这个程序的结果是:
int main()
{
int a=1,b=2,m=0,n=0,k;
k=(n=b<a)&&(m=a) ;
printf("%d,%d\n",k,m);
return 0;
}
解法:
主要判断 && 的运算方式,只有在左边的值是正确的情况才继续运算。
左边(n = b < a)是一个错误的,返回值为0,右边不再执行也为0.
所以答案是: 0 , 0
在64位系统以及64位编译器下,以下描述正确的是
struct T {
char a;
int *d;
int b;
int c:16;
double e;
};
T *p;
解法:
主要考结构体的计算和偏移。这里是64位系统,所以int *d;占用8个字节,所以整题结构的大小应该是 (1+7)+8+4+(1+3)+7 = 32
若有说明:int a[][3]={1,2,3,4,5,6,7};则 a 数组第一维的大小是()。
解法:
定义二维数组时,若第一维不确定第二维确定,则数组必须初始化;初始化后数组中元素个数除以第二维大小加上1得到第一维大小;若第一二维全部确定,可以不初始化,默认元素全部为0;不允许第二维不定.
所以这里定以后的数组是: int a[][3] = {1,2,3}{4,5,6}{7,0,0}
void main()
{
char c;
scanf(“%c”,&c);
switch(c)
{
case’1’:
printf(“1”);
case’2’:
printf(“2”);
case’3’:
printf(“3”);
default:
printf(“error”);
}
}
解法:
这是一个坑,这里没有break,所以按照顺序一直打印到最后。
在 32 位编译器上,设有定义
char *str1 = “Hello”, str2[] = “Hello”; ,
则以下语句 printf("%d %d", sizeof(str1), sizeof(str2)); 的输出结果是()
解法:
*str1是指针,占用4字节(32位)
最后有一个’\0’占位符,所以是6字节
参加位运算的数据其类型不能是()。
解法:
按位运算是对字节或字中的实际位进行检测、设置或移位, 它只适用于字符型和整数型变量以及它们的变体, 对其它数据类型不适用。
fun(int a, int b, int c)
{ c = a * b; }
int main(void)
{ int c;
fun(2, 3, c);
printf(”%d\n”, c);
return 0;
}
解答:
这也是坑,函数fun()的参数为值传递,在函数体内的操作不能对传入的值进行修改,所以无法确定 。正确的方法应该是将C改为一个指针或者地址,通过指针和地址进行值传递。
struct T {},sizeof(struct T)的值为
解答:
若结构体为空,其大小为1;若不为空,结构体的存储比较复杂,需要考虑内存存储的字节对齐。