c - 以下片段的输出是什么?

标签 c function pointers

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/

相关文章:

jquery 关于 PreventDefault 的澄清

javascript - 在 javascript 中编写反函数?

c++ - 如何检查指针何时被删除?

c++ - 如何设置 lua.dll 以便 lua.exe 不会在每个目录中都要求它?

从 2 个 C 文件更改外部变量

c - Putchar、getchar、while 循环中缺少字符

c++ - 状态机问题

php - 将默认参数作为 null 发送并使用函数中设置的默认值

c++ - 通过指针访问数组

c - mpi 进程在信号 11 时退出