答案就在代码下面
-
-
-
3.下面的代码,i 和 j 的值分别是什么?为什么? |
-
4.下面代码里,假设在 32 位系统下,各 sizeof 计算的结果分别是多少? |
-
-
6.下面的代码里,哪些内容可被改写,哪些不可被改写? |
-
7.下面的两段代码有什么区别?什么时候需要使用代码(2) |
-
8. 在 32 位的 x86 系统下,输出的值为多少? |
-
-
-
12.写代码向内存 0x12ff7c 地址上存入一个整形数 0x100。 |
-
-
-
-
-
-
-
20.请写一个C函数,若当前系统是Big_endian的,则返回0;若是little_endian的,则返回1。本题的意思即写一个小函数测试数据在当前编译器下是“大端”存储还是“小端”存储 |
void foo(void)
{
unsigned int a = 6;
int b = -20;
(a + b>6)? puts(">6"):puts("<=6");
}
答案:输出 >6
原因:当表达式中存在有符号类型和无符号类型时所有的操作数都自动转换为无符号类型。
6的补码:00000000 00000000 00000000 00000110
-20补码:11111111 11111111 11111111 11110010
相加后按照无符号形式输出:4294967282 > 6。
void foo(void)
{
char string[10],str1[10];
int i;
for(i=0; i<10; i++)
str1[i] = ’a’;
strcpy(string , str1);
printf(“%s”,string);
}
答案:程序运行崩溃
原因:strcpy在运行时只有碰到‘\0’时才会停下来,而字符数组string在初始化时末尾并没有‘\0’,所以在拷贝时会一直向后找‘\0’,直至访问越界。
3.下面的代码,i 和 j 的值分别是什么?为什么? |
static int j;
int k=0;
void fun1(void)
{
static int i=0;
i++;
}
void fun2(void)
{
j=0;
j++;
}
int main()
{
for(k=0