📜  C 程序的输出 |第 31 组(指针)

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

C 程序的输出 |第 31 组(指针)

先决条件: C/C++ 中的指针

  1. 问题 1
    输出会是什么?
    #include
      
    int main()
    { 
        int a[] = { 1, 2, 3, 4, 5} ;
        int *ptr;
        ptr = a;
        printf(" %d ", *( ptr + 1) );
      
        return 0;
    }
    

    输出

    2
    

    描述:
    可以将数组分配给指针。所以,当 ptr = a;执行时,元素 a[0] 的地址被分配给 ptr,*ptr 给出元素 a[0] 的值。当 *(ptr + n) 被执行时,数组中第 n 个位置的值被访问。

  2. 问题2
    输出会是什么?
    #include
      
    int main()
    { 
        int a = 5;
        int *ptr ;
        ptr = &a;
        *ptr = *ptr * 3;
        printf("%d", a);
      
        return 0;
    }
    

    输出:



    15
    

    描述:
    ptr = &a;复制 ptr 中 a 的地址,使 *ptr = a 和语句 *ptr = *ptr * 3;可以写成 a = a * 3;使a为 15。

  3. 问题2
    输出会是什么?
    #include
      
    int main()
    {
        int i = 6, *j, k;
        j = &i;
        printf("%d\n", i * *j * i + *j);
        return 0;
    }
    

    输出:

    222
        

    描述:
    根据 BODMAS 规则,乘法具有更高的优先级。在表达式 i * *j * i + *j; 中,将首先计算 i * *j *i 并给出结果 216,然后加上 *j,即 i = 6,输出变为 222。

  4. 问题 4
    输出会是什么?
    #include
      
    int main()
    {
        int x = 20, *y, *z;
          
        // Assume address of x is 500 and 
        // integer is 4 byte size 
        y = &x; 
        z = y;
        *y++; 
        *z++;
        x++;
        printf("x = %d, y = %d, z = %d \n", x, y, z);
        return 0;
    }
    

    输出:

    x=21 y=504 z=504

    描述:
    一开始,x 的地址分配给 y,然后 y 分配给 z,这使得 y 和 z 相似。当指针变量递增时,值与变量的大小相加,在这种情况下,y 和 z 递增 4。

  5. 问题 5
    输出会是什么?
    #include
      
    int main()
    {
        int x = 10;
        int *y, **z;
        y = &x; 
        z = &y;
        printf("x = %d, y = %d, z = %d\n", x, *y, **z);
        return 0;
    }
    

    输出:

    x=10 y=10 z=10

    描述:
    *y 是指针变量,而 **z 是指向指针变量的指针。 *y 给出它持有的地址处的值并且 **z 搜索两次,即,它首先获取它持有的地址处的值,然后给出该地址处的值。