一直对指针理解不深,慢慢摸索中
今天写了了例子,望高手指导下
#include <stdio.h>
#include<stdlib.h>
#include <string.h>
char *f1();
void main()
{
char *p = NULL;
p = f1();
printf("%s\n", p);
}
char *f1()
{
char p[] = "abc";
return p;
}
出现 警告: 函数返回局部变量的地址 [默认启用]
运行后没有打印结果
个人认为数组p为局部,p数组中存放的是“abc”,f1函数调用结束后返回数组指针,但p已经出栈,因此没有打印结果
如把p修改成static类型,则能正确打印
#include <stdio.h>
#include<stdlib.h>
#include <string.h>
char *f1();
void main()
{
char *p = NULL;
p = f1();
printf("%s\n", p);
}
char *f1()
{
static char p[] = "abc";
return p;
}
因为static类型生存期为程序调用该函数到程序运行结束,所以能正确打印
再看char *类型的
#include <stdio.h>
#include<stdlib.h>
#include <string.h>
char *f1();
void main()
{
char *p = NULL;
p = f1();
printf("%s\n", p);
}
char *f1()
{
char *p = "abc";
return p;
}
f1函数中,p变量在函数返回后后销毁,p的值返回给被掉函数,p对应的值指向“abc”的地址,“abc”存放在数据段,只读不可写,因此能够正常打印