C语言入门有哪些常见难点和困惑,如何有效克服?

2026-04-10 08:142阅读0评论SEO问题
  • 内容介绍
  • 相关推荐

本文共计395个文字,预计阅读时间需要2分钟。

C语言入门有哪些常见难点和困惑,如何有效克服?

通过返回局部变量指针输出,因为局部变量在函数执行完毕后会被销毁,但返回的指针指向的值仍然有效。

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

C语言入门有哪些常见难点和困惑,如何有效克服?

#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; }

结果:

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

本文共计395个文字,预计阅读时间需要2分钟。

C语言入门有哪些常见难点和困惑,如何有效克服?

通过返回局部变量指针输出,因为局部变量在函数执行完毕后会被销毁,但返回的指针指向的值仍然有效。

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

C语言入门有哪些常见难点和困惑,如何有效克服?

#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; }

结果:

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