指针函数

579 词

指针函数


指针函数的定义

  • 本质是一个函数
  • 指针作为函数的返回值

用例

1
2
3
4
5

char * func(){
char *p = "123";//创建变量123
return p;//返回p的地址
}

指针函数的坑

这个指针函数返回的指针指向的数据一定是字符串”123”吗?

如果让刚学完C语言的我回答,我可能会从语气中听出一些端倪,但是要我说个原因倒是不好描述。不过现在回过头来看,底层知识的清明就可以很快找到问题的关键了。

函数对应线程,线程拥有自己的栈空间(操作系统的逻辑内存),函数内的变量自然也是存储在栈空间中的。当函数完成他的使命之后,操作系统就会把栈空间释放掉,而栈空间中的变量自然也就被释放掉了

这会带来什么呢?如果还记得指针的意义的话,就知道指针存的是地址,而不是数据,那么既然栈空间的数据都释放掉了,返回的指针指向的内存自然是没有意义的。或者说会获得一个“脏值”

ok,那么怎么解决这个问题呢?
难道要在外部调用这个函数的线程上就创建这个值吗?这明显不符合函数的要求和目的

其实很简单,static一下就能让操作系统为你的变量保留内存地址了。这也是static的“主要用途”。

1
2
3
4
5

char * func(){
static char *p = "123";//创建变量123
return p;//返回p的地址
}