C语言入门难题有哪些?

更新于
2026-10-03 22:52:01
3阅读来源:SEO基础
  • 内容介绍
  • 相关推荐

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

通过返回局部变量指针输出,由于局部变量在函数执行完毕后会被销毁,因此直接输出其地址可能导致未定义行为。执行结果可能是不确定的,因为局部变量的存储空间在函数返回后已不再有效。

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

#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()函数。

阅读全文

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

通过返回局部变量指针输出,由于局部变量在函数执行完毕后会被销毁,因此直接输出其地址可能导致未定义行为。执行结果可能是不确定的,因为局部变量的存储空间在函数返回后已不再有效。

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

#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()函数。

阅读全文