先决条件: 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的值。