0
点赞
收藏
分享

微信扫一扫

c语言学习困惑(一)

NicoalsNC 2023-09-13 阅读 30

通过返回局部变量的指针并输出,因为局部变量在函数执行完之后就会销毁,但是执行的结果却是有所不同

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char *print_stack();
char *print_stack1();

int main()
{
    char *d;
    char *p;
    d = print_stack();
    printf("main d 变量存储的地址: %p\n", d);
    printf("d=%s\n", d);
    p = print_stack1();
    printf("main p 变量存储的地址: %p\n", p);
    printf("p=%s\n", p);
    return 0;
}
char *print_stack()
{
    char c[17] = "I am print_stack";
    puts(c);
    printf("c 变量存储的地址: %p\n", c);
    return c;
}
char *print_stack1()
{
    char c[17] = "I am print_stack";
    char *p;
    p = c;
    puts(p);
    printf("p 变量存储的地址: %p\n", p);
    return p;
}

结果: image.png

初步结论: 变量c是一个局部变量,它在函数执行完毕后会被销毁。然而,将指向该局部变量的指针d和p返回给了main()函数。当你尝试在main()函数中访问这些指针时,你实际上正在访问已经不存在的内存空间,这会导致未定义的行为。 因此,当你尝试打印d和p时,输出的结果是不确定的。有可能是原始值,也有可能是空指针(null),这取决于编译器如何处理已经被销毁的局部变量。

举报

相关推荐

0 条评论