c语言中,返回指针的函数的问题

//统计一行文字中的大写,小写,空格,数字,及其他字符的个数#include<stdio.h>voidmain(){int*tongji(char*string);cha... //统计一行文字中的大写,小写,空格,数字,及其他字符的个数
#include<stdio.h>
void main()
{
int *tongji(char *string);
char *str;
str="ABC abd 123 !@#$"; //任意一个字符串
int *p;
p=tongji(str);
printf("address=%d\n",p); //为了验证指针是否返回而输出接收的地址
int i;
for(i=0;i<=4;i++) //打印结果
{
printf("%d\n",*(p+i));
}
}
int *tongji(char *string) //定义了一个返回指针的函数
{
int number[5]={0},*p1;
p1=number;
int i;
for(i=0;*(string+i)!='\0';i++)
{
if(*(string+i)>=65&&*(string+i)<=90) (*p1)++;
else if(*(string+i)>=97&&*(string+i)<=122) (*(p1+1))++;
else if(*(string+i)==' ') (*(p1+2))++;
else if(*(string+i)>=48&&*(string+i)<=57) (*(p1+3))++;
else (*(p1+4))++;
}
for(i=0;i<=4;i++)
{
printf("%d\n",*(p1+i));
}
printf("address=%d\n",p1); //为了验证指针是否返回而输出应该的地址
return(p1);
}

结果如下
3
3
7
3
4
address=1244936
address=1244936
2147111
124487
1
8
12450056
我的问题是,经常验证,子函数确实已经将指针的地址返回到主函数中(address=1244936
address=1244936)但是,为什么输出地址当中的内容时,结果却大不一样?
难道子函数中的值没有保留下来?还是别的原因?
展开
 我来答
匿名用户
2010-03-17
展开全部
int number[5]={0},*p1;
这里的number数组会在退出函数后被释放,所以,其中保存的值在从函数返回后不再具有可读性.

改为如下:

static int number[5]={0},*p1=number;

或者用malloc()动态分配空间创建数组
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式