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()函数钱前带*代表什么意思。
书上只是初略提了一下什么指针做函数返回值。
如果不带会有什么影响,带了会有什么好处,新手求详解,谢谢。
调试结果带不带*都能出结果,只是不带的时候警告多了。 展开
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()函数钱前带*代表什么意思。
书上只是初略提了一下什么指针做函数返回值。
如果不带会有什么影响,带了会有什么好处,新手求详解,谢谢。
调试结果带不带*都能出结果,只是不带的时候警告多了。 展开
展开全部
由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*,此处有警告
虽然结果是正确的,但强烈不推荐不加*,应该保持数据类型的一致性
由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*)”,我太明白这个前提是哪来的?
望解答,谢谢
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询