C 程序的输出 |第 39 组(前增量和后增量)
先决条件:前增量和后增量
问题 1
C
#include
int main()
{
char* p = "mayhem";
char c;
int i;
for (i = 0; i < 3; i++) {
c = *p++;
}
printf("%c", c);
return 0;
}
CPP
#include
void test(char c[])
{
c=c+2;
c--;
printf("%c",*c);
}
int main()
{
char ch[5]={'p','o','u','r'};
test(ch);
return 0;
}
C
#include
int main()
{
int i;
char ch[] = {'x', 'y', 'z'};
char *ptr, *str1;
ptr = ch;
str1 = ch;
i = (*ptr-- + ++*str1) - 10;
printf("%d", i);
return 0;
}
CPP
#include
int main(void)
{
char *ptr = "Linux";
printf("\n [%c] \n", *ptr++);
printf("\n [%c] \n", *ptr);
return 0;
}
CPP
#include
int main()
{
int num1 = 5;
int num2 = 3;
int num3 = 2;
num1 = num2++;
num2 = --num3;
printf("%d %d %d", num1, num2, num3);
return 0;
}
- 是
- H
- 电子
- 一种
Answer : y
说明:指针 'p' 指向字符数组的第三个位置。原因是在'for'循环迭代中,字符指针'p'的值已经增加了三次。
问题2
CPP
#include
void test(char c[])
{
c=c+2;
c--;
printf("%c",*c);
}
int main()
{
char ch[5]={'p','o','u','r'};
test(ch);
return 0;
}
上面程序的输出是什么?
- 磷
- ○
- 你
- r
Answer: o
说明:当字符数组 'ch' 作为参数传递给函数'test()' 时,传递的是数组 'ch[]' 的基地址。函数“test()”中的变量“c”指向数组的第二个位置。然后它递减 1 指向 'o'。
问题 3
C
#include
int main()
{
int i;
char ch[] = {'x', 'y', 'z'};
char *ptr, *str1;
ptr = ch;
str1 = ch;
i = (*ptr-- + ++*str1) - 10;
printf("%d", i);
return 0;
}
如果字符'x'=120, 'y'=121, 'z'=122 的 ASCII 值,上述程序的输出是什么?
- 231
- 233
- 232
- 363
Answer : 231
说明:指针ptr 指向'x'。
Step1:由于是后递减操作,所以值保持为120,稍后递减。
Step2:指针str1指向'x'。由于 ++ 和 * 具有相同的优先级评估从右到左开始。对于表达式 ++*str1,首先评估 *str1,它给出 120,即 x 的 ASCII 等效值。接下来我们计算前缀增量 ++120 = 121。因此最终结果是 (120+121)-10=131
问题 4 – 以下程序的输出是什么?
CPP
#include
int main(void)
{
char *ptr = "Linux";
printf("\n [%c] \n", *ptr++);
printf("\n [%c] \n", *ptr);
return 0;
}
输出 :
[L]
[i]
说明:由于 '++' 和 '*' 的优先级相同,所以对 '*ptr++' 的处理从右到左进行。按照这个逻辑,ptr++ 先被求值,然后是 *ptr。所以这两个操作的结果都是“L”。现在因为在 ptr 上应用了后缀“++”,所以下一个 printf() 将打印“i”。
问题 5 – 以下程序的输出是什么?
CPP
#include
int main()
{
int num1 = 5;
int num2 = 3;
int num3 = 2;
num1 = num2++;
num2 = --num3;
printf("%d %d %d", num1, num2, num3);
return 0;
}
- 231
- 311
- 327
- 321
Answer:311