首先,指针和引用不是一个概念——尽管很多编译器用指针实现引用。其次,你还是没有搞清楚指针。
data = pointer; //使用全局数据,并没有真正使用参数返回内存
fun(data); // 使用全局变量作为参数,而函数体中又使用了data这个全局变量。实际上,fun中的pointer就是data的一个拷贝。
综上,整个程序是个充满bug的程序,而且还有内存泄露,每次调用fun(),则要丢失50个字节。这个程序只不过碰巧能工作罢了。整个程序和你对于指针的理解都是一塌糊涂——这么说有点不客气,但这是事实。
相信你是希望通过一个二级指针来返回一段内存,那么应该如下:
void fun(char ** &pointer)
{
pointer=(char**)malloc(sizeof(char*) * 10); // pointer指向一块内存区,该内存区的元素类型是char *相当于char * []
*pointer = (char*)malloc(sizeof(char) * 10);//为第一个元素分配10字节空间
**pointer = 'a';
*(*pointer + 1) = 'b';
*(*pointer + 2) = '\0';
printf("IN fun: output: %s\n", *pointer);
}
int main()
{
char **data;
fun(&data);
printf("IN main: output: %s\n", *data);
if (*data) //释放内存
free(*data);
if (data)
free(data);
return 0;
}
当使用指针时不能够清楚理解时,画一个图能有助于理解。有问题可以参考:"指针是通往地狱的捷径"(
http://blog.chinaunix.net/u/12783/showart_376700.html)及"C/C++:如何理解复杂的声明"(
http://blog.chinaunix.net/u/12783/showart_378340.html)