69,371
社区成员
发帖
与我相关
我的任务
分享
int *ptr1,*ptr2; //全局变量
int max (int x, int y)
{
extern *ptr1;
if (x < y)
{
ptr1 = &y;
return y;
}
else
{
ptr1 = &x;
return x;
}
}
int min (int x, int y)
{
extern *ptr2;
if (x > y)
{
ptr2 = &y;
return y;
}
else
{
ptr2 = &x;
return x;
}
}
void main()
{
extern *ptr1,*ptr2;
int (*pointer)();
int a = 60, b = 90, maxone = 0, minone = 0;
ptr1 = &maxone;
ptr2 = &minone;
printf("%d,%d,%d,%d\n",*ptr1,maxone,*ptr2,minone);
pointer = max;
maxone = pointer(a,b);
printf("%d,%d,%d,%d\n",*ptr1,maxone,*ptr2,minone);
pointer = min;
minone = pointer(a,b);
printf("%d,%d,%d,%d\n",*ptr1,maxone,*ptr2,minone);
}
int max (int x, int y)
{
extern *ptr1;
if (x < y)
{
ptr1 = &y;//在这里y是栈中的一个临时变量,则ptr1指向的地址是随机的,函数返回后*ptr1的值有可能保留有可能被覆盖
//不建议这样用
return y;
}
else
{
ptr1 = &x;
return x;
}
}
//首先说下,你贴出来的代码我很怀疑楼主的编译器能编译过去
//帮看了下,主要是*ptr1在max中接收到&y的地址,但是出来的时候*ptr1是一个很大的值,输入的时候以0代替了
//帮你改了下,这样容易理解
#include <stdio.h>
#include <stdlib.h>
int ptr1,ptr2; //全局变量
int max (int x, int y)
{
//extern *ptr1;
if (x < y)
{
ptr1 = y;
return y;
}
else
{
ptr1 = x;
return x;
}
}
int min (int x, int y)
{
// extern *ptr2;
if (x > y)
{
ptr2 = y;
return y;
}
else
{
ptr2 = x;
return x;
}
}
void main()
{
int (*pointer)(int,int);
int a = 60, b = 90, maxone = 0, minone = 0;
ptr1 = maxone;
ptr2 = minone;
printf("%d,%d,%d,%d\n",ptr1,maxone,ptr2,minone);
pointer = max;
maxone = pointer(a,b);
printf("%d,%d,%d,%d\n",ptr1,maxone,ptr2,minone);
pointer = min;
minone = pointer(a,b);
printf("%d,%d,%d,%d\n",ptr1,maxone,ptr2,minone);
}
#include<stdio.h>
int *ptr1,*ptr2; //全局变量
int max (int x, int y)
{
extern int *ptr1;
if (x < y)
{
ptr1 = &y;
return y;
}
else
{
ptr1 = &x;
return x;
}
}
int min (int x, int y)
{
extern int *ptr2;
if (x > y)
{
ptr2 = &y;
return y;
}
else
{
ptr2 = &x;
return x;
}
}
int main()
{
extern int *ptr1,*ptr2;
int (*pointer)();
int a = 60, b = 90, maxone = 0, minone = 0;
ptr1 = &maxone;
ptr2 = &minone;
printf("%d,%d,%d,%d\n",*ptr1,maxone,*ptr2,minone);
pointer = max;
maxone = pointer(a,b);
printf("%d,%d,%d,%d\n",*ptr1,maxone,*ptr2,minone);
pointer = min;
minone = pointer(a,b);
printf("%d,%d,%d,%d\n",*ptr1,maxone,*ptr2,minone);
return 0;
}
0,0,0,0
90,90,0,0
90,90,60,60
Terminated with return code 0
Press any key to continue ...
int (*pointer)(int,int);