//对下列指针题目能有很好的理解,将会是你掌握指针的关键;
1.写出下面程序的结果
char *c[] = { "ENTER", "NEW", "POINT", "FIRST" };char **cp[] = { c+3, c+2, c+1, c };
char ***cpp = cp;
int main(void)
{
printf("%s\n", **++cpp);
printf("%s\n", *--*++cpp+3);
printf("%s\n", *cpp[-2]+3);
printf("%s\n", cpp[-1][-1]+1);
return 0;
}
2.int main()
{
char *str[]={"welcome","to","Fortemedia","Nanjing"};
char**p=str+1;
str[0]=(*p++)+2;
str[1]=*(p+1);
str[2]=p[1]+3;
str[3]=p[0]+(str[2]-str[1]);
printf("%s\n",str[0]);
printf("%s\n",str[1]);
printf("%s\n",str[2]);
printf("%s\n",str[3]);
return 0;
}
3.分析程序
#include<stdio.h>
int main()
{
char a[20]="You_are_a_girl";
char *p=a;
char **ptr=&p;
//printf("p=%d\n",p);
//printf("ptr=%d\n",ptr);
//printf("*ptr=%d\n",*ptr);
printf("**ptr=%c\n",**ptr);
ptr++;
//printf("ptr=%d\n",ptr);
//printf("*ptr=%d\n",*ptr);
printf("**ptr=%c\n",**ptr);
}
4.分析程序:
#include<stdio.h>
int inc(int a)
{
return(++a);
}
int multi(int*a,int*b,int*c)
{
return(*c=*a**b);//
}
typedef int(FUNC1)(int in);
typedef int(FUNC2) (int*,int*,int*);
void show(FUNC2 fun,int arg1, int*arg2)
{
int (*p)(int)=&inc;
int temp =p(arg1);//11
fun(&temp,&arg1, arg2);
printf("%d\n",*arg2);
}
main()
{
int a;
show(multi,10,&a);
return 0;
}
5.下列定义的含义
(1)int *p[3];
(2)int (*p)[3];
(3)int *p(int);
(4)int (*p)(int);
(5)int *(*p)(int);
(6)int (*p[3])(int);
(7)int *(*p[3])(int);
(8)void *p;
6.以下代码是把一个字符串倒序,如“abcd”倒序后变为“dcba”。请找出代码中的所有错误 。
#include"string.h"
main()
{
char*src="hello,world";
char* dest=NULL;
int len=strlen(src);
dest=(char*)malloc(len);
char* d=dest;
char* s=src[len];
while(len--!=0)
d++=s--;
printf("%s",dest);
return 0;
}