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)但是,为什么输出地址当中的内容时,结果却大不一样?
难道子函数中的值没有保留下来?还是别的原因? 展开
#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)但是,为什么输出地址当中的内容时,结果却大不一样?
难道子函数中的值没有保留下来?还是别的原因? 展开
1个回答
2010-03-17
展开全部
int number[5]={0},*p1;
这里的number数组会在退出函数后被释放,所以,其中保存的值在从函数返回后不再具有可读性.
改为如下:
static int number[5]={0},*p1=number;
或者用malloc()动态分配空间创建数组
这里的number数组会在退出函数后被释放,所以,其中保存的值在从函数返回后不再具有可读性.
改为如下:
static int number[5]={0},*p1=number;
或者用malloc()动态分配空间创建数组
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询