C指针问题
我想在一个自定义z函数中用指针做参数,自定义函数返回一个指针p,并在主函数中输出我在自定义函数里输入的数字#include<stdio.h>#include<stdlib...
我想在一个自定义z函数中用指针做参数,自定义函数返回一个指针p,并在主函数中输出我在自定义函数里输入的数字
#include<stdio.h>
#include<stdlib.h>
int z(int *p);
int main()
{
int i,*p[5];
z(p);//自定义函数
for(i=0;i<5;i++)
printf("%d",p+i);//输出数字
free(p);
return 0;
}
int z(int *p) 自定义函数
{
int i;
if((p=(int*)calloc(5,sizeof(int)))==NULL){ //动态分配内存给指针
printf("cuowu");exit(0);
}
for(i=0;i<5;i++) //输入数字
scanf("%d",p+i);
return *p;
}
哪里有问题啊?请前辈指教?不要只给代码啊,指出我的错误最好能适当解释下!
这是我最新修改的请问有哪些问题呢?
#include<stdio.h>
#include<stdlib.h>
int *z(int *p);//自定义函数
int main()
{
int i,*p=NULL;
z(p); //调用自定义函数
for(i=0;i<5;i++)
printf("%d",*(p+i));//输出数字
free(p);
return 0;
}
int *z(int *p)//定义一个参数是指针的函数
{
int i;
if((p=(int*)calloc(5,sizeof(int)))==NULL){ //动态分配内存返回地址给指针p
printf("cuowu");exit(0);
}
for(i=0;i<5;i++) //输入数字
scanf("%d",p+i);
return p; //返回一个指针
} 展开
#include<stdio.h>
#include<stdlib.h>
int z(int *p);
int main()
{
int i,*p[5];
z(p);//自定义函数
for(i=0;i<5;i++)
printf("%d",p+i);//输出数字
free(p);
return 0;
}
int z(int *p) 自定义函数
{
int i;
if((p=(int*)calloc(5,sizeof(int)))==NULL){ //动态分配内存给指针
printf("cuowu");exit(0);
}
for(i=0;i<5;i++) //输入数字
scanf("%d",p+i);
return *p;
}
哪里有问题啊?请前辈指教?不要只给代码啊,指出我的错误最好能适当解释下!
这是我最新修改的请问有哪些问题呢?
#include<stdio.h>
#include<stdlib.h>
int *z(int *p);//自定义函数
int main()
{
int i,*p=NULL;
z(p); //调用自定义函数
for(i=0;i<5;i++)
printf("%d",*(p+i));//输出数字
free(p);
return 0;
}
int *z(int *p)//定义一个参数是指针的函数
{
int i;
if((p=(int*)calloc(5,sizeof(int)))==NULL){ //动态分配内存返回地址给指针p
printf("cuowu");exit(0);
}
for(i=0;i<5;i++) //输入数字
scanf("%d",p+i);
return p; //返回一个指针
} 展开
展开全部
你的定义有问题,应该是int i, (*p)[5]; 这样定义的p是指针,指向一个具有5个整数的数组。
而你的定义int *p[5], 定义的是一个数组, 数组里面存的是5个整型指针。
之所以你能运行,是因为在这里数组名是数组首元素的地址,是而首元素的类型是int*, 和你动态分配的类型相同,故不报错
而你的定义int *p[5], 定义的是一个数组, 数组里面存的是5个整型指针。
之所以你能运行,是因为在这里数组名是数组首元素的地址,是而首元素的类型是int*, 和你动态分配的类型相同,故不报错
追问
我已经进行修改了,请看看我的补充,帮忙指出错误吧
追答
main函数中
z(p); //调用自定义函数
改成
p = z(p); //调用自定义函数
原因是C语言调用函数时参数都是值传递,传进去的是p的副本,相当于有一个指针变量pa,和一个变量pb,他们存的值是一样的,一开始都是垃圾(因为对我们没用)。
同样,设main函数里你定义的指针p为pa,当而调用z函数时,相当于是创建了那个pb指针,pb初始化为pa所指向的不确定的垃圾值,然后你动态分配内存,使得pb指向你所分配的空间首地址,而pa并未改变,接着返回了pb,但这个pb你并未使用。当你回到main,pa指向的空间还是垃圾。故得不到你要的结果。
所以换成p=z(p);相当于你使用了pb,使得pa=pb,此时pa和pb都指向你所申请的空间首地址。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
指针在你这个小程序能体现多大价值?
等需要高级点的数据结构,以及高级点的算法,就需要指针了。
谭浩强这题,是体现指向函数的指针的作用,用指针保存函数的地址,调用这个函数,可直接通过指针调用。
在QT,GTK之类的GUI库里,它们会提供一个函数,供开发者将 自定义函数 与指定事件关联;
因为 GUI库的开发者 不知道 使用者 是用什么函数,只有用个函数指针,保存 使用者 给的函数的地址,等事件触发后,通过该函数指针调用使用者的自定义函数。
等需要高级点的数据结构,以及高级点的算法,就需要指针了。
谭浩强这题,是体现指向函数的指针的作用,用指针保存函数的地址,调用这个函数,可直接通过指针调用。
在QT,GTK之类的GUI库里,它们会提供一个函数,供开发者将 自定义函数 与指定事件关联;
因为 GUI库的开发者 不知道 使用者 是用什么函数,只有用个函数指针,保存 使用者 给的函数的地址,等事件触发后,通过该函数指针调用使用者的自定义函数。
追问
谢谢,讲得很好,但我希望你还能就我这一程序进行指点
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你要返回一个指针,那你的返回值类型就得是int *才对啊(int z(int *p) 自定义函数该写成int* z(int*p))
追问
你说的对,我把int *p[5]改成了*p;再按照你说的自定义函数改成了int *z(int *p)但还是无法运行
追答
for(i=0;i<5;i++) //输入数字
scanf("%d",p+i);
这个肯定有问题的,p+i是int变量?你这样写是不对的,具体语法我忘了,反正这里该是p+i地址里放的变量。
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询