关于返回指针的函数的一个问题

leon1741
博客专家认证
2008-05-28 07:50:09
问题如下,一个很简单的小程序,但是编译是总是提示警告。
请各位帮我分析一下,为什么?
指针与函数都是整型的,为什么会不吻合?

int * search (int *p[10],int n)
{
int *pp;
pp = *(p + n);
return(pp);
}

main()
{
int array[10] = {0,1,2,3,4,5,6,7,8,9};
int *top, *botton;

top = search(array,1);
botton = search(array,8);
}

TEXT1.C(16): warning C182: pointer to different objects
TEXT1.C(18): warning C182: pointer to different objects
...全文
230 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhouyanlizyl 2008-06-12
  • 打赏
  • 举报
回复
别他妈的提谭浩强的书了,它书上错误多的是,垃圾,还号称国内计算机专家,一堆屎,该程序正确如下:
#include "stdafx.h"
int * search(int p[10],int n)
{
int *pp;
pp = (p+n);
return (pp);
}
int main(int argc, char* argv[])
{
int array[10] = {0,1,2,3,4,5,6,7,8,9};
int *top,*botton;
top = search(array,1);
botton = search(array,9);
printf("%d\n",*top);
printf("%d\n",*botton);
return 0;
}
zhouyanlizyl 2008-06-12
  • 打赏
  • 举报
回复
别他妈的提谭浩强的书了,它书上错误多的是,垃圾,还号称国内计算机专家,一堆屎,该程序正确如下:
#include "stdafx.h"
int * search(int p[10],int n)
{
int *pp;
pp = (p+n);
return (pp);
}
int main(int argc, char* argv[])
{
int array[10] = {0,1,2,3,4,5,6,7,8,9};
int *top,*botton;
top = search(array,1);
botton = search(array,9);
printf("%d\n",*top);
printf("%d\n",*botton);
return 0;
}
zhouyanlizyl 2008-06-12
  • 打赏
  • 举报
回复
别他妈的提谭浩强的书了,它书上错误多的是,垃圾,还号称国内计算机专家,一堆屎,该程序正确如下:
#include "stdafx.h"
int * search(int p[10],int n)
{
int *pp;
pp = (p+n);
return (pp);
}
int main(int argc, char* argv[])
{
int array[10] = {0,1,2,3,4,5,6,7,8,9};
int *top,*botton;
top = search(array,1);
botton = search(array,9);
printf("%d\n",*top);
printf("%d\n",*botton);
return 0;
}
充电宝111 2008-05-29
  • 打赏
  • 举报
回复
char * search (char *p[10],int n)
{
char *pp;
pp = *(p + n);
return(pp);
}
main()
{

char *array[10] = {"0","1","2","3","4","5","6","7","8","9"};
char *top, *botton;

top = search(array,1);
botton = search(array,8);
}
leon1741 2008-05-28
  • 打赏
  • 举报
回复
恩,看到你的帖子了
没错,这样就行了
多谢多谢!原来是返回值的类型
leon1741 2008-05-28
  • 打赏
  • 举报
回复
楼上的似乎对了,按照你的意思,把int *p[10]改成了int p[10],如下:

int * search (int p[10],int n)
{
int *pp;
pp = p + n;
return(*pp);
}

刚才的错误是没了,但是又出现一个:
Nonportable pointer conversion
这是怎么回事?
K行天下 2008-05-28
  • 打赏
  • 举报
回复
改正为:

int * search (int *p,int n)
{
int *pp;
pp = p + n;
return(pp);
}

main()
{
int array[10] = {0,1,2,3,4,5,6,7,8,9};
int *top, *botton;

top = search(array,1);
botton = search(array,8);
system("pause");
}

K行天下 2008-05-28
  • 打赏
  • 举报
回复
int *p[10]是指针数组,当然不符合
leon1741 2008-05-28
  • 打赏
  • 举报
回复
是吗?
但是我这段程序基本是照谭浩强那本书上抄来的
它的原文就是这样

我改了下程序,还是不行啊
或许是别的原因吧???
davelv 2008-05-28
  • 打赏
  • 举报
回复
pp = *(p + n);
pp是int型指针,p+n也是int型指针,*(p + n)这个就是一个数字了,把int数字赋给pp指针就出问题了吧

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧