📜  C程序的输出|套装64(指针)

📅  最后修改于: 2021-05-29 13:14:17             🧑  作者: Mango

先决条件: C语言中的指针
问题1:以下程序的输出是什么?

#include "stdio.h"
int main()
{
    char a[] = { 'A', 'B', 'C', 'D' };
    char* ppp = &a[0];
    *ppp++; // Line 1
    printf("%c %c ", *++ppp, --*ppp); // Line 2
}

选项:
a)CB
b)学士学位
c)卑诗省
d)CA

OUTPUT: (d) C A

解释:
第1行:现在,ppp指向下一个存储位置,即字符数组的索引1。
第2行:首先,执行– * ppp = –(* ppp),因此值’B’(位于char []数组的索引1位置)减1(即,变为’A’ ),然后将其发送以进行打印。然后执行* ++ ppp = *(++ ppp),它首先将指向数组下一个元素的指针递增,并在该索引号2中打印值“ C”。尽管与* ++ ppp相比,首先执行– * ppp,但显示将按照我们在第2行中的printf()函数中提到的顺序显示。因此,我们将输出显示为CA。

问题2:以下程序的输出是什么?

#include 
int main()
{
    int* ptr;
    *ptr = 5;
    printf("%d", *ptr);
    return 0;
}

选项:
a)编译错误
b)运行时错误
c)5
d)链接器错误

OUTPUT: (b) Runtime error

说明:指针变量(* ptr)无法初始化。

问题3:以下程序的输出是什么?

#include 
int main()
{
    int a = 36;
    int* ptr;
    ptr = &a;
    printf("%u %u", *&ptr, &*ptr);
    return 0;
}

选项:
a)地址值
b)价值地址
c)地址地址
d)编译错误

OUTPUT: (c)Address Address

说明: &和*互相抵消,并显示存储在指针变量ptr中的地址,即a的地址。

问题4:以下程序的输出是什么?

#include 
int main()
{
    int num = 10;
    printf("num = %d addresss of num = %u", num, &num);
    num++;
    printf("\n num = %d addresss of num = %u", num, &num);
    return 0;
}

选项:
a)编译错误
b)num = 10 num的地址= 2293436
num = 11 num = 2293438的地址
c)num = 10 num的地址= 2293436
num = 11 num = 2293440的地址
d)num = 10 num的地址= 2293436
num = 11 num的地址= 2293436

OUTPUT: (d)

说明:此处,变量num的值保持为10,其地址为2293436,然后以num ++的形式进行增量,该num ++使用相同的地址空间来存储递增的值。

问题5:以下程序的输出是什么?

#include 
int main()
{
    int i = 25;
    int* j;
    int** k;
    j = &i;
    k = &j;
    printf("%u %u %u ", k, *k, **k);
    return 0;
}

选项:
a)地址地址值
b)地址值
c)地址地址
d)编译错误

OUTPUT : (a)address address value

说明:这里的指针变量* j存放i的地址,然后另一个指针变量* k存放j的地址。
现在
k = j的地址
* k =我的地址
** k = i的值。