C char指针和函数参数传递

时间:2018-08-02 07:43:43

标签: c pointers

两个函数getData和getData2都可以得到正确的答案,它们是否有效?

 #include<stdio.h>
 #include<stdlib.h>
 void getData(const char** data) {
     if(data == NULL) {
         printf("NULL\n");
     }
     *data = "error";
 }
 const char* getData2() {
     const char*p = "hello";
     return p;
 }
 int main(){
     const char *p = NULL;
     getData(&p);
     printf("data:%s\n",p);
     printf("data2:%s\n",getData2());
 }

1 个答案:

答案 0 :(得分:3)

{'XXX': ['f', 'd', 'c', 'e'],
 'DDD': ['f', 'd', 'c', 'g'],
 'ZZZ': ['f', 'd', 'h', 'g'],
 'KKK': ['c', 'c', 'd', 'd']}

自C ++ 11起不允许这样做,但较早的版本允许。

字符串文字char* p = "hello"; 存储在无法修改的只读内存中,但是指向非常量"hello"的指针具有修改内存的能力,这将修改指向字符串文字时,在运行时崩溃。

现代的编译器不会接受从charconst char*的这种转换。

char*参数和char** data分配相同。 *data = "error";的键入应为data,以使分配合法。