通过返回局部变量的指针并输出,因为局部变量在函数执行完之后就会销毁,但是执行的结果却是有所不同 #include stdio.h#include stdlib.h#include string.hchar *print_stack();char *print_stack1();int main(){
通过返回局部变量的指针并输出,因为局部变量在函数执行完之后就会销毁,但是执行的结果却是有所不同
#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),这取决于编译器如何处理已经被销毁的局部变量。