char c[5]="hello"和char *p="hello"区别
2013-05-16 16:21
411 查看
char[5]="hello"和char *p="hello"区别
第一个是一个字符数组(或者后边加一个‘\0’叫字符串数组),如果那样写不明确,可以明确的这样写:char c[5]={'h','e','l','l','o'};这就一个数组。如果是在局部函数中是放在栈中的,不能返回c在主函数中打印的,因为局部函数结束,c[5]的生命周期也就结束了。
char *p="hello",是字符串常量,存于rodata段,所以如果在局部函数中返回p也是可以的,在局部函数结束的时刻它把hello的rodata段中的地址返回,主函数中可以用的。
这个涉及到了程序在内存中的分部。
第一个是一个字符数组(或者后边加一个‘\0’叫字符串数组),如果那样写不明确,可以明确的这样写:char c[5]={'h','e','l','l','o'};这就一个数组。如果是在局部函数中是放在栈中的,不能返回c在主函数中打印的,因为局部函数结束,c[5]的生命周期也就结束了。
char *p="hello",是字符串常量,存于rodata段,所以如果在局部函数中返回p也是可以的,在局部函数结束的时刻它把hello的rodata段中的地址返回,主函数中可以用的。
这个涉及到了程序在内存中的分部。
#include <stdio.h> #include <malloc.h> char *func1(void) { char s[5] = "hello"; return s; } char *func2(void) { char *p = "world"; return p; } int main(void) { printf("func1() = %s\n", func1()); printf("func2() = %s\n", func2()); return 0; }
相关文章推荐
- 关于char * c="hello"与char c[]="hello"的区别(面试宝典)
- char p[] = "hello world" 与 char *p = "Hello world" 的区别
- char str[] = "hello world";和char *str = "hello world";区别
- 关于char * c="hello"与char c[]="hello"的区别
- char str[] = "hello world";和char *str = "hello world";区别
- 关于char * c="hello"与char c[]="hello"的区别
- 【转载】关于char * c="hello"与char c[]="hello"的区别
- char *myString = "Hello-World!";和 char myString[] = "Hello-World!";
- char *s=&quot;string&quot;和char s[]=&quot;string&quot;的区别
- [java] "Hello"和new String("Hello")产生String对象的区别
- char *s="string"和char s[]="string"的区别
- char *p="abc" 与 char p[]="abc" 的区别
- char a[] = "hello world1"和char *p = "hello world2";的区别
- char* a = "zhf"; 和 char a[] = "zhf"; 之间的区别
- 字符串赋值给字符指针(char *a="hello")的正确理解方式
- 字符串赋值给字符指针(char *a="hello")的正确理解方式
- C/C++中char* p = "hello" 和 const char* p = "hello"的区别
- char *p= "hello"和char p[] = "hello"的区别
- [ALIB2-EXAM]有关memmove时的char *p=" "和char p[]=" "的区别
- String str = "hello"; 与 String str = new String("hello"); 有什么区别?