首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

函数返回指针的有关问题

2012-03-05 
函数返回指针的问题#includestdio.h#includestdlib.hchar*getz()intmain(){char*ppgetz()//cout

函数返回指针的问题
#include   <stdio.h>
#include   <stdlib.h>
char*   getz();
int   main()

{
char   *p;
p=getz();
//cout < <endl;
//cout < <p;
printf( "%c\n ",*(p+8));//ok
printf( "%s\n ",p);//wrong
system( "PAUSE ");
return   0;

}

char*   getz()
{
char   s[10];
char   *ps;
int   i;
ps=s;
for   (i=0;   i <10;i++)
{
s[i]=i+ '0 ';
}

return   ps;
}
根据网上搜出来的说话是char   s[10];不是static所以返回后释放掉了,所以printf( "%s\n ",p);//wrong,可是为什么printf( "%c\n ",*(p+8));//ok

[解决办法]
printf( "%c\n ",*(p+8));
同样道理,也是错误的。

只不过,有的时候,曾经的栈中的存放变量的那块内存还没被清洗掉。或许还可以访问而已。
[解决办法]
请注意 访问了非法的内存才会崩溃 .....
[解决办法]
//我觉得楼主是错用指针,函数的值传递和引用传递,引用传递就是
//直接修改参数变量内容,楼主把指针用反了,指针指向的变量应该在main函数等
//调用的函数中,而楼主却把分配变量放到被调函数中,等函数返回后你的p=getz();
//得到了地址没错,可是因为被调函数一经返回,所有分配的变量就被释放。内容是不是
//会被改变很难说,即时你上面的程序正确运行、结果正确,这种设计也是错误的。
//应该把变量定义在主调函数中,然后用指针作参数,如下没有测试,大家看看是否正确。
//很少用C有些语法不一定对。
#include <stdio.h>
#include <stdlib.h>
void getz();//
int main()
{char *p;char s[11];
/*初始化s数组后调用函数getz*/
p=&s;
getz(p);
printf( "%c\n ",*(p+8));//ok
printf( "%s\n ",p);//wrong
system( "PAUSE ");
return 0;
}
void getz(char *s)
{int i;
for (i=0; i <10;i++)
{ s[i]=i+ '0 ';
}
s[11] = '\0 ';
}

热点排行