C 以下代码段的输出是什么?

C 以下代码段的输出是什么?,c,function,pointers,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 #包括 #包括 int*call(); void main() { in

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
#包括
#包括
int*call();
void main()
{
int*ptr;
ptr=call();
clrsc();
printf(“%d”,*ptr);
getch();
}  
int*call()
{
INTA=25;
a++;
回报&a;
}
输出:
-10
代码的工作原理如下: 调用
call()
,a=25,然后a=26。让a的地址为65518。此地址将返回到ptr。由于返回类型是int,所以返回的不是65518(由于循环属性),而是-18。
所以ptr=&a=-18。然后CLRSC将其清除…但如何将
*ptr
打印为输出?我的意思是地址不能为负(-18)。

返回指向本地的指针是未定义的行为。任何事情都有可能发生——您的程序可能会崩溃,但更有可能打印出任意数字

如果需要从C函数返回指针,则需要在动态存储器中分配内存块,如下所示:

int*call()
{
    int *a=malloc(sizeof(int));
    *a = 25;
    *a++;
    return a;
}
int* call()
{
    static int a=25;
    a++;
    return &a;
}
或者使用指向静态分配块的指针,如下所示:

int*call()
{
    int *a=malloc(sizeof(int));
    *a = 25;
    *a++;
    return a;
}
int* call()
{
    static int a=25;
    a++;
    return &a;
}

如果选择动态分配路由,调用方必须释放函数返回的指针。

将指针返回到本地是未定义的行为。任何事情都有可能发生——您的程序可能会崩溃,但更有可能打印出任意数字

int*call()
{
int a=25; // <--- use malloc here i.e. int a = malloc(sizeof(int)); then you can set a value to a and return the pointer without any problemk, OTHERWISE => it will return an address of some random junks you don't want, its gonna be completely random
a++;
return &a;
}
如果需要从C函数返回指针,则需要在动态存储器中分配内存块,如下所示:

int*call()
{
    int *a=malloc(sizeof(int));
    *a = 25;
    *a++;
    return a;
}
int* call()
{
    static int a=25;
    a++;
    return &a;
}
或者使用指向静态分配块的指针,如下所示:

int*call()
{
    int *a=malloc(sizeof(int));
    *a = 25;
    *a++;
    return a;
}
int* call()
{
    static int a=25;
    a++;
    return &a;
}
如果选择动态分配路由,调用方必须释放函数返回的指针。

int*call()
int*call()
{
int a=25; // <--- use malloc here i.e. int a = malloc(sizeof(int)); then you can set a value to a and return the pointer without any problemk, OTHERWISE => it will return an address of some random junks you don't want, its gonna be completely random
a++;
return &a;
}
{ int a=25;//它将返回一些你不想要的随机垃圾的地址,它将是完全随机的 a++; 回报&a; }
int*call()
{
int a=25;//它将返回一些你不想要的随机垃圾的地址,它将是完全随机的
a++;
回报&a;
}
当调用
call()
时,将为局部变量
a
创建一个新的堆栈帧,该局部变量在执行
call()
期间有其生存期。当它返回时,堆栈帧将与其局部变量和数据一起移除。尝试在函数外部使用此数据是未定义的,因为它在逻辑上不再存在

如果要在函数中声明
a
,然后再使用它,则需要分配它:

... 
int *a = malloc(sizeof int);
*a = 26;
return a;
... 
请记住在使用完此指针后,请将其
free()
释放

调用
call()
时,将为局部变量
a
创建一个新的堆栈帧,该局部变量在执行
call()
期间具有其生存期。当它返回时,堆栈帧将与其局部变量和数据一起移除。尝试在函数外部使用此数据是未定义的,因为它在逻辑上不再存在

如果要在函数中声明
a
,然后再使用它,则需要分配它:

... 
int *a = malloc(sizeof int);
*a = 26;
return a;
... 

请记住在使用完此指针后,请将其
free()
释放

这是未定义的行为,任何事情都可能发生,26、30、世界末日等等。这意味着-18作为允许的地址???@user3018725您没有打印地址,您正在打印地址的内容。返回类型不是
int
,返回类型是
int*
。好的……地址仍然可以是负数吗?这是未定义的行为,任何事情都可能发生,26、30、世界末日等等。这意味着-18作为允许的地址???@user3018725您没有打印地址,您正在打印地址的内容。返回类型不是
int
,返回类型是
int*
。好的……地址仍然可以是负数吗?