clrscr 之后发生了什么?
#include<stdio.h>
#include<conio.h>
int *call();
void main()
{
int *ptr;
ptr=call();
clrscr();
printf("%d",*ptr);
getch();
}
int*call()
{
int a=25;
a++;
return &a;
}
output:
-10
代码如下:
call()
被调用,a=25,然后 a=26。令 a 的地址为 65518。此地址返回给 ptr。由于返回类型是 int,而不是 65518,(由于循环属性)返回 -18。
所以 ptr=&a=-18。然后 clrscr 清除它....但是如何将 *ptr
打印为输出?我的意思是地址不能为负数(-18)。
最佳答案
返回指向本地的指针是未定义的行为。任何事情都可能发生——你的程序可能会崩溃,但更有可能的是它会打印一些任意数字。
如果您需要从 C 函数返回一个指针,您需要在动态存储中分配一个内存块,如下所示:
int*call()
{
int *a=malloc(sizeof(int));
*a = 25;
*a++;
return a;
}
或者使用指向静态分配 block 的指针,如下所示:
int* call()
{
static int a=25;
a++;
return &a;
}
如果您选择动态分配路由,调用者必须释放您的函数返回的指针。
关于c - 以下片段的输出是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20150614/