C语言,指针问题

#include"stdio.h"int*find(int*pa,int*pb,intan,intbn){int*pta,*ptb;pta=pa;ptb=pb;while... #include "stdio.h"
int *find(int *pa, int *pb, int an, int bn)
{
int *pta, *ptb;
pta = pa;
ptb = pb;
while (pta < pa + an && ptb < pb + bn)
{
if (*pta < *ptb)
pta++;
else if (*pta > *ptb)
ptb++;
else
return pta;
}
return 0;
}

void main()
{
int *p, i;
int a[] =
{
1, 3, 5, 7, 9, 11, 13, 15
};
int b[] =
{
2, 4, 6, 8, 11, 15, 17
};
printf("The elements of array a:\n");
for (i = 0; i < sizeof(a) / sizeof(a[0]); i++)
printf("%d ", a[i]);
printf("\nThe elements of array b:\n");
for (i = 0; i < sizeof(b) / sizeof(b[0]); i++)
printf("%d ", b[i]);
p = find(a, b, sizeof(a) / sizeof(a[0]), sizeof(b) / sizeof(b[0]));
if (p)
printf("\nThe first element in both arrays is %d\n ", *p);
else
printf("Doesn't found the same element!\n");
getch();
}

程序如上,过程不难,只是不知道int *find(int *pa, int *pb, int an, int bn)中*find()函数钱前带*代表什么意思。
书上只是初略提了一下什么指针做函数返回值。

如果不带会有什么影响,带了会有什么好处,新手求详解,谢谢。
调试结果带不带*都能出结果,只是不带的时候警告多了。
展开
 我来答
lcy8760450
推荐于2016-05-22 · TA获得超过956个赞
知道小有建树答主
回答量:610
采纳率:64%
帮助的人:394万
展开全部
由return pta; 知find返回类型为 int*(因为pta为int*),所以find前应该要加 int*
由p = find(a, b, sizeof(a) / sizeof(a[0]), sizeof(b) / sizeof(b[0]));知
find返回类型为int*(因为p为int*),所以find前应该要加 int*
不加*之所以答案对了,是因为类型的强制转换
return pta;时因为是 int find所以返回值由int*强制转换int,此处有警告
由p = find(...),返回值又由int强制转换成int*,此处有警告
虽然结果是正确的,但强烈不推荐不加*,应该保持数据类型的一致性
追问
你说“(因为pta为int*)”这是哪来的?
我在程序中只能看出他想要返回一个地址,并复制给p
你又说“(因为p为int*)”,我太明白这个前提是哪来的?
望解答,谢谢
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式