C 程序的输出 |设置 10
预测以下程序的输出。
难度等级:菜鸟
问题 1
c
#include
int main()
{
typedef int i;
i a = 0;
printf("%d", a);
getchar();
return 0;
}
c
#include
int main()
{
typedef int *i;
int j = 10;
i *a = &j;
printf("%d", **a);
getchar();
return 0;
}
C
#include
int main()
{
typedef int *i;
int j = 10;
int *p = &j;
i *a = &p;
printf("%d", **a);
getchar();
return 0;
}
c
#include
int main()
{
typedef static int *i;
int j;
i a = &j;
printf("%d", *a);
getchar();
return 0;
}
c
#include
int main()
{
typedef int *i;
int j = 10;
i a = &j;
printf("%d", *a);
getchar();
return 0;
}
输出:0
程序没有问题。它简单地创建一个用户定义的I型并创建类型i的变量a。
问题2
C
#include
int main()
{
typedef int *i;
int j = 10;
i *a = &j;
printf("%d", **a);
getchar();
return 0;
}
输出:编译器错误 -> 使用不兼容的指针类型初始化。
行typedef int *i使i成为 int * 类型。所以,一个声明意味着是指针的指针。错误消息在不同的编译器上可能不同。
此代码的一种可能的正确解决方案在问题 4 中。现在也试试这个:
C
#include
int main()
{
typedef int *i;
int j = 10;
int *p = &j;
i *a = &p;
printf("%d", **a);
getchar();
return 0;
}
问题 3
C
#include
int main()
{
typedef static int *i;
int j;
i a = &j;
printf("%d", *a);
getchar();
return 0;
}
输出:编译器错误 -> a 的多个存储类。
在 C 中,typedef 被认为是一个存储类。错误消息在不同的编译器上可能不同。
问题 4
C
#include
int main()
{
typedef int *i;
int j = 10;
i a = &j;
printf("%d", *a);
getchar();
return 0;
}