Predict the output of the below programs.
Difficulty Level: Rookie
Question 1
#include<stdio.h>
int main()
{
typedef int i;
i a = 0;
printf("%d", a);
getchar();
return 0;
}
Output: 0
There is no problem with the program. It simply creates a user defined type i and creates a variable a of type i.
Question 2
#include<stdio.h>
int main()
{
typedef int *i;
int j = 10;
i *a = &j;
printf("%d", **a);
getchar();
return 0;
}
Output: Compiler Error -> Initialization with incompatible pointer type.
The line typedef int *i makes i as type int *. So, the declaration of a means a is pointer to a pointer. The Error message may be different on different compilers.
One possible correct solution of this code is in Question 4. Also now try this:
#include <stdio.h>
int main()
{
typedef int *i;
int j = 10;
int *p = &j;
i *a = &p;
printf("%d", **a);
getchar();
return 0;
}
Question 3
#include<stdio.h>
int main()
{
typedef static int *i;
int j;
i a = &j;
printf("%d", *a);
getchar();
return 0;
}
Output: Compiler Error -> Multiple Storage classes for a.
In C, typedef is considered as a storage class. The Error message may be different on different compilers.
Question 4
#include<stdio.h>
int main()
{
typedef int *i;
int j = 10;
i a = &j;
printf("%d", *a);
getchar();
return 0;
}
Output:
10
Please write comments if you find any of the answers/explanations incorrect, or you want to share more information about the topics discussed above.
References:
https://eecs.uq.edu.au/
http://publib.boulder.ibm.com/infocenter/macxhelp/v6v81/index.jsp?topic=/com.ibm.vacpp6m.doc/language/ref/clrc03sc03.htm
https://learn.microsoft.com/en-us/cpp/c-language/typedef-declarations?redirectedfrom=MSDN