指针参数为空,函数中声明的字符串在函数退出时消失吗?解决思路

指针参数为空,函数中声明的字符串在函数退出时消失吗?
void f(char **t)
{
  t = "hello world" ;
}

{
...
char *p = NULL ;
f(p);
...
}

在调用f(p)的时候,p为空指针,看到很多代码在f函数内部判断如果P为空,则退出,但从编译角度,没有问题,运行也通过。为什么需要p不为NULL呢?

另外,函数f中,p指向"hello ,world",是否函数退出时,p指向的内存快"hello,world"内存块消失?



------解决方案--------------------
你这样写,虽然运行上没有问题,但实际是有隐患的!看下面的代码:
C/C++ code

#include <iostream>
using namespace std;

int main()
{
    char *ptr;
    ptr = "hello world!";
    cout << ptr << endl;
    return 0;
}

------解决方案--------------------
没有分配内存的时候就写
可能会导致内存的某部分数据被修改
如果被修改的地方的数据很重要
那结果。。。。。

------解决方案--------------------
引用楼主 KamiSang 的帖子:
在调用f(p)的时候,p为空指针,看到很多代码在f函数内部判断如果P为空,则退出,但从编译角度,没有问题,运行也通过。为什么需要p不为NULL呢?

另外,函数f中,p指向"hello ,world",是否函数退出时,p指向的内存快"hello,world"内存块消失?