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
本文深入探讨了C语言编程中的几个关键概念和技术,包括字符数组的动态修改、字符串操作、位运算显示及八进制数值处理。通过具体代码示例,讲解了如何使用指针进行字符串替换、位操作和数值转换,以及不同数据类型在内存中的表现。

764

被折叠的 条评论
为什么被折叠?



