回复 4楼 zklhp
真懂吗?
void ** (*d) (int &,char **(*)(char *,char **));
float ( * ( * e[10]) (int &)[5];
都啥意思 呵呵
=======================================================
今天的九点多钟的时候,看到该文章,而且也看到版主发的这两个关于指针的题目。第一眼看到时,发现好多指针运算符,猜想自己一定不会,所以就不打算做版主所发的题目。但接下看下去,发现版主说,这是最基础的,吓了一跳,所以又往回头看这两道题,最后也做了下。不知道上面啥意思,但程序写出来了。可最后程序输出到最后一行输出,爆了。但还是想把程序发出来。但发程序前,先问下两个问题,一,返回指针安全吗?返回指针的指针安全吗?二,为啥有三层楼,从第三层能返回一个指向指针的指针给A,然后拿A返回给第一层的指向指针的指针。最后到第一层楼的时候,程序爆了。
首先,我把void ** (*d) (int &,char **(*)(char *,char **));这个改成
char ** (*d)(int &i, char **(*x1)(char *, char **));
都一样,只不过把void改为char,在char **(*)(char *,char **)的加个名字。
这个分成两部分看。char **(*)(char *,char **)与void ** (*d) (int &,char **(*)(char *,char **));
char **(*x1)(char *,char **)是一个指向函数的指针,返回值是指向字符的指针的指针。
而char ** (*d) (int &,char **(*x1)(char *,char **));也是一个指向函数的指针,返回值是指向字符的指针的指针。最后代码如下,代码写的很烂。
![](zzz/editor/img/code.gif)
程序代码:
#include <stdio.h>
char ** i_array(int &i, char **(*x1)(char *, char **));
char ** (*d)(int &i, char **(*x1)(char *, char **));
char **c_x1(char *, char **);
int main(void)
{
int a = 1;
char **p1;
d = i_array;
p1 = (*d)(a, c_x1);
//这行输出程序爆了。
printf("看看有没有返回p所指向的地址:%s\n", *p1);
return 0;
}
char **i_array(int &i, char **(*x1)(char *c1, char **c2))
{
char **p;
char *c = "abc";
printf("输出引用的值1出来看看:%d\n", i);
p = (*x1)(c, &c);
printf("看看出不出的得Test字符串:%s\n");
return p;
}
char **c_x1(char *c1, char **c2)
{
char *p = "Test";
char **p1 = &p;
printf("c1:%s\n", c1);
printf("c2:%s\n", *c2);
return p1;
}