指针

卡多希_ 2019-11-08 09:33:36
输入两个整数,找出最小整数并输出;定义int*min(int x,inty),返回两个整数中最小的地址。求教~
...全文
1184 78 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
78 条回复
切换为时间正序
请发表友善的回复…
发表回复
源代码大师 2021-05-06
  • 打赏
  • 举报
回复
希望对你有帮助:https://blog.csdn.net/it_xiangqiang/category_10581430.html 希望对你有帮助:https://blog.csdn.net/it_xiangqiang/category_10768339.html
千梦一生 2019-11-19
  • 打赏
  • 举报
回复
引用 38 楼 liups 的回复:
[quote=引用 37 楼 自信男孩 的回复:]
[quote=引用 3 楼 bsnow 的回复:]
想到一种方法,但是 强烈不推荐用以下方式写代码。


#include <stdlib.h>

int *min(int x, int y)
{
int *re = (int *)malloc(sizeof(int));
re = x < y ? &x : &y;
return re;
}

这样做还是可以的,或者用static静态变量。返回静态变量的地址也是可以的。[/quote]
这样做还是可以的?我就问你申请的内存去哪里了?[/quote]
哈哈,从re = x < y ? &x : &y;开始就被覆盖了。内存泄漏
这个函数如果返回后立马取值的话。虽然结果上确实是对的,但严格说取的也是垃圾数据。毕竟返回的终究是局部变量地址。
lin5161678 2019-11-18
  • 打赏
  • 举报
回复
引用 79 楼 千梦一生 的回复:
[quote=引用 78 楼 千梦一生 的回复:]

//假设题没有出错是自己理解偏了,那么强行理解
int*min(int x,int y)
{
return *((int*)x)>*((int*)y)?(int*)x:(int*)y;
}
虽然给的是int参数,但也没明确表示x、y的值不是地址。可以这么理解[/quote]不能 既然是 int 参数 就明确 x y不是地址
csucxy 2019-11-17
  • 打赏
  • 举报
回复
这个神题,惹来这么多讨论。如果严格响应该题的要求,下面这个方案似乎靠得上一点边: #include <stdio.h> int i; int j; int* TestMin(int x, int y) { return x < y ? &i : &j; } int main(void) { printf("请输入两个整:"); scanf("%d%d", &i, &j); printf("小值为:%d\n", *(TestMin(i, j))); return 0; } 可是写下这样的代码,自己都觉得羞耻,如果为自己写出这种东西,赶紧找快豆腐碰死算了。 另外,楼上有写带参数的宏的,个人认为不能算是该题目的答案,因为中明确有“...返回两个整数中...”。程序中的宏在程序编译前会进行宏替换,所以带参数的宏,形式上像函数,但却不是函数,这种“函数”也不会有调用与返回过程。 总之,如果严格遵照题目要求,这题真神——大神出的题。
羅昇 2019-11-16
  • 打赏
  • 举报
回复
引用 81 楼 liups 的回复:
[quote=引用 79 楼 千梦一生 的回复:]
[quote=引用 78 楼 千梦一生 的回复:]

//假设题没有出错是自己理解偏了,那么强行理解
int*min(int x,int y)
{
return *((int*)x)>*((int*)y)?(int*)x:(int*)y;
}

虽然给的是int参数,但也没明确表示x、y的值不是地址。可以这么理解[/quote]
这个不行!因为函数返回时x和y不再有效,强行访问会出问题的[/quote]
他的意思是把传进来的int数据当做指针来操作,传址运算可以的
csucxy 2019-11-15
  • 打赏
  • 举报
回复
有一个说话还是需要纠正一下,不是不能返回局部变量的地址,是原则上不要返回非静态局部变量的地址。静态局部变量的地址是可以返回的,在非常非常特殊的情况下,也可以返回非静态局部变量的地址(绝不推荐),所以,VS对返回非静态局部变量的地址也只是报警告: warning C4172: 返回局部变量或临时变量的地址 而不是报错。至于返回静态局部变量的地址,本身就是合理合法的,VS就不会报任警告/错误了。
csucxy 2019-11-15
  • 打赏
  • 举报
回复
首先我也如楼上各位一样,觉得这个题目出得不怎么样。如果实在是要做,下面这个程序勉强应付一下。 #include<stdio.h> int* TestMin(int x, int y) { static int tmin = 0; if (x < y) tmin = x; else tmin = y; return &tmin; } int main() { int i = 100; int j = 25; printf("%d", *TestMin(i, j)); return 0; } 通过将局部变量设为静态,返回它的地址没有问题,但是这个地址其实和原来要比较的两个值是没什么关系的。这种情况下,函数返回一个地址和直接返回小值相比,本质上没有意义,还容易造成混乱。 但真的觉得这种题目出得...找最小值,要返回最小值的指针 #include<stdio.h> int* TestMin(int* px, int* py) { if (*px < *py) return px; else return py; } int main() { int i = 100; int j = 25; printf("%d", *TestMin(&i, &j)); return 0; } 如果形参变一下,就没那么多问题了
liups 2019-11-15
  • 打赏
  • 举报
回复
引用 79 楼 千梦一生 的回复:
[quote=引用 78 楼 千梦一生 的回复:]

//假设题没有出错是自己理解偏了,那么强行理解
int*min(int x,int y)
{
return *((int*)x)>*((int*)y)?(int*)x:(int*)y;
}
虽然给的是int参数,但也没明确表示x、y的值不是地址。可以这么理解[/quote] 这个不行!因为函数返回时x和y不再有效,强行访问会出问题的
羅昇 2019-11-15
  • 打赏
  • 举报
回复
引用 79 楼 千梦一生 的回复:
[quote=引用 78 楼 千梦一生 的回复:]

//假设题没有出错是自己理解偏了,那么强行理解
int*min(int x,int y)
{
return *((int*)x)>*((int*)y)?(int*)x:(int*)y;
}

虽然给的是int参数,但也没明确表示x、y的值不是地址。可以这么理解[/quote]
这么理解没问题,就是调用这个函数的时候还要把指针强制转换为int型哈哈
千梦一生 2019-11-15
  • 打赏
  • 举报
回复
引用 78 楼 千梦一生 的回复:

//假设题没有出错是自己理解偏了,那么强行理解
int*min(int x,int y)
{
return *((int*)x)>*((int*)y)?(int*)x:(int*)y;
}

虽然给的是int参数,但也没明确表示x、y的值不是地址。可以这么理解
千梦一生 2019-11-15
  • 打赏
  • 举报
回复

//假设题没有出错是自己理解偏了,那么强行理解
int*min(int x,int y)
{
return *((int*)x)>*((int*)y)?(int*)x:(int*)y;
}
tianyingang 2019-11-15
  • 打赏
  • 举报
回复
#include <stdlib.h>
#include <stdio.h>
int result;
int*
mymin(int x,int y){
    result = x < y ? x : y;
    return &result;

}

int
main(int argc,char **argv)
{
    int z;

    z = *(mymin(3,6));
    printf("z = %d\n",z);

    exit(0);
}
到处看房的狗 2019-11-14
  • 打赏
  • 举报
回复
哈哈有意思,大神不少啊
mp-ui 2019-11-14
  • 打赏
  • 举报
回复
题目错的,不能返回局部变量的地址
lingyimofang 2019-11-13
  • 打赏
  • 举报
回复
直接传地址不好么?为什么把值传进来。
羅昇 2019-11-13
  • 打赏
  • 举报
回复
引用 60 楼 ytfhwfnh 的回复:
我的解决方案:
#define min(x,y) ((x)<=(y)?&(x):&(y))

理由:
1. 凡是调用min(x,y)的地方无需做任何更改,便可达到楼主目的。
2. 不用malloc,不怕野指针。


如果要坚持题目没错的话,我觉得这个最可行
ggglivw 2019-11-13
  • 打赏
  • 举报
回复
题目出的有问题,返回一个临时变量地址给你有毛线用,就算真返回,返回值也应该是int,而不是int*. 真的是毛病
weixin_45871461 2019-11-13
  • 打赏
  • 举报
回复
同问根本不知道这是什么
liups 2019-11-12
  • 打赏
  • 举报
回复
引用 58 楼 早打大打打核战争 的回复:
如果题目确实是这样的,那只能理解为返回一个有效地址包含小值即可 int *min(int x, int y) { static int p = x < y ? x : y; return &p; }
静态变量,这个思路不错!
  • 打赏
  • 举报
回复
如果题目确实是这样的,那只能理解为返回一个有效地址包含小值即可

int *min(int x, int y)
{
static int p = x < y ? x : y;
return &p;
}
加载更多回复(58)

70,025

社区成员

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

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