📜  C 程序的输出 |第 39 组(前增量和后增量)

📅  最后修改于: 2022-05-13 01:56:11.079000             🧑  作者: Mango

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;
}


  1. H
  2. 电子
  3. 一种
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;
}

上面程序的输出是什么?

  1. 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 值,上述程序的输出是什么?

  1. 231
  2. 233
  3. 232
  4. 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;
}
  1. 231
  2. 311
  3. 327
  4. 321
Answer:311