1.以下程序运行结果是 !2!4!6!8!
int main()
{
char a[] = "123456789", *p = a;
int i = 0;
while (*p)
{
if (i % 2 == 0)
*p = '!';
i++; p++;
}
puts(a);//!2!4!6!8!
system("pause");
return 0;
}
2.程序运行结果是 Afgd
int main()
{
char str[] = "ABCDEFG";
char *p1, *p2;
p1 = "abcd";//p1指针指向字符串abcd的首地址
p2 = "efgh";//p2指针指向字符串efgh首地址
strcpy(str + 1, p2 + 1); //指针移一位所指的字符串fgh 复制到 str[1]这个位置(从这个位置开始往后覆盖) 即Afgh
strcpy(str + 3, p1 + 3);//指针移三位所指的字符串d 复制到str[3]这个位置 即Afgd
printf("%s\n", str);//Afgd
system("pause");
return 0;
}
3.如下代码输出结果是 000000f7,fffffff7
int main()
{
unsigned int a = 0xFFFFFFF7;
unsigned char i = (unsigned char)a;
char *b = (char *)&a;
printf("%08x,%08x", i, *b);//000000f7,fffffff7
//%08x 8位对齐的16进制格式
system("pause");
return 0;
}
char* b = (char*)&a; 等价于:unsigned int* p = &a; // p中的内容是的地址,即p指向a
char* b = (char*)p; // 此处的强制转换只是使b也指向a而已 ,这里是char类型的指针转换,而不是char类型的转换,影响的只是指针的寻址
4.下面程序输出结果为 10
int main()
{
int x = 1, y = 012;
printf("%d\n", y*x++);//10
system("pause");
return 0;
}
数字前面加 0,表示的八进制数。例如:012 表示的是八进制,由于 2 的 3 次方等于 8,因此八进制和二进制之间的转换关系就是:从右往左,每三位一组,就是二进制。因此,八进制的 012 转换成二进制数就是:1010(即:000 001 010 )。
举个例子,十进制780等于7*10^2 + 7*10^1 + 7*10^0
同理,八进制的012等于0*8^2 + 1*8^1 + 2*8^0 = 8 + 2 = 10