昏睡渐醒
2019-05-09 16:26
采纳率: 86.1%
浏览 819

关于指针函数,将指针赋值为函数返回值时......

以下为源码,我照着一本C语言教材打的,定义了两个求较小的数的指针函数,但是输出的值总是很大的数字,而且和赋的值无关,请问这是怎么回事?

#include "pch.h"
#include

int main()
{
int * minp(int *, int *);
int * min(int x, int y);
int a, b, *p,*o;
scanf_s("%d,%d",&a,&b);
p = min(a,b);
printf("%d", *p);
o=minp(&a, &b);
printf("%d", *o);

}
int * min(int x, int y)
{
if (x < y)return(&x);
else return(&y);
}
int * minp(int *x, int *y)
{
int * q;
q = *x < *y ? x:y;
return(q);
}

  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

3条回答 默认 最新

  • threenewbee 2019-05-09 16:33
    已采纳

    特别注意下,不要返回局部变量的指针,因为局部变量在堆栈上,函数返回,地址就是非法的了。

    // Q760646.cpp : This file contains the 'main' function. Program execution begins and ends there.
    //
    
    #include <iostream>
    
    #include <stdio.h>
    
    int main()
    {
        //int* minp(int*, int*);
        void min(int x, int y, int* p);
        int a, b, * p, * o;
        scanf_s("%d,%d", &a, &b);
        int p1;
        min(a, b, &p1);
        printf("%d", p1);
        //o = minp(&a, &b);
        //printf("%d", *o);
    
    }
    void min(int x, int y, int *p)
    {
        if (x < y) *p = x;
        else *p = y;
    }
    //int* minp(int* x, int* y)
    //{
    //  int* q;
    //  q = *x < *y ? x : y;
    //  return(q);
    //}
    

    图片说明

    已采纳该答案
    打赏 评论
  • xb1667 2019-05-09 16:32

    int * minp(int *, int *);
    int * min(int x, int y)

    函数指针所指向函数参数类型与定义不一致! int*与int是不一样的!!

    打赏 评论
  • s11811247 2019-05-09 18:29

    int * min(int ,int) 这个int * 不是函数指针,只是返回值是指针类型,我按照你的代码敲了一遍,只有scanf_s 改成了scanf ,一个一个输入,
    结果并没有什么问题,也没有遇到你说的那个数值很大的问题,其实从函数里传出指针类型没什么问题,只要那块内存没有刚好被占用,数值
    应该还是对的。

    打赏 评论

相关推荐 更多相似问题