What does the following expression means ? char *(*(* a[N]) ( )) ( );
an array of n pointers to function returning pointers to functions returning pointers to characters.
A C declaration is read with the right-left (spiral) rule: start at the identifier, read postfix [ ] and ( ) to the right first, then the * to the left, moving outward through the parentheses.
Start at a: a[N] means a is an array of N elements; the * to its left inside (* a[N]) makes each element a pointer.
Moving out, the ( ) after (* a[N]) means each pointer points to a function; the * to the left of that group means the function returns a pointer.
Moving out again, the next ( ) means that returned pointer points to a function, and finally char * means this second function returns a pointer to char.
So a is an array of N pointers to functions that return pointers to functions returning char pointers; the shorter readings stop one level too early or wrongly start with a function or a pointer instead of an array.
Hence, the answer is an array of n pointers to function returning pointers to functions returning pointers to characters..
What is the output of the following program ?
(Assume that the appropriate preprocessor directives are included and there is no syntax error)
main ( )
{ char S[ ]="ABCDEFGH";
printf ("%C", * (& S[3]));
printf ("%s", S+4);
printf ("%u", S);
/* Base address of S is 1000 */
}
Which of the following statements about pointers in C are TRUE.
(A) Pointers can be used to access array elements
(B) Pointers can store the address of another pointer
(C) Pointers are automatically deferenced in expression
(D) Pointers cannot be used to access structure members
Choose the correct answer from the options given below :
What will be the output of the following C code?
#include<stdio.h>
void main()
{
int arr[5] = {10, 20, 30, 40, 50};
int *p = (int*) (&arr + 1);
printf("%d%d", *(arr + 1), *(p - 1));
}
Which of the following is correct way to declare a functional pointer in C ?
Consider following C program :
#include<stdio.h>
int main()
{
int x[]={2, 4, 6, 8, 10};
int a, b=0, *y=x+4;
for(a=0; a<5; a++)
{
b=b+(*y-a)-*(y-a);
}
printf("%d\n", b);
return 0;
}
What will be the output of the above C program ?
Consider the following code :
#include<stdio.h>
void f1(char *x, char *y) {
char *t1; t1=x; x=y; y=t1;}
void f2(char **x, char **y) {
char *t1; t1=*x; *x=*y; *y=t1;}
int main()
{
char *a="ONE", *b="TWO";
f1(a, b); printf("%s %s", a, b);
f2(&a, &b); printf("%s %s", a, b);
return 0;
}
What will be the output of the above code?
#include<stdio.h>
void main()
{
int arr[]={1, 2, 3, 4, 5};
int *p=arr;
printf("%d", *p++);
printf("%d", *(p+1));
}
Find the output of the above code?
What is the output of the following C programming language code?
#include<stdio.h>
int main()
{
int x = 10;
int *p = &x;
*p = *p + 5;
printf("%d %d", x, *p);
return 0;
}
Consider the following ANSI-C program.
#include <stdio.h>
int main(){
int *ptr, a, b, c;
a=5; b=11; c=20;
ptr=&a; *ptr=c; ptr=&c;
a=*(&b); c=*ptr-a;
printf("%d",c);
return(0);
}
The output of this program is ____________. (answer in integer)
Note: Assume that the program compiles and runs successfully.