随笔 - 51, 文章 - 1, 评论 - 41, 引用 - 0
数据加载中……

CPPEXP —— char[]和char*的区别

说明

使用char[]char*定义变量,并赋值字符串常量,这两者有较大区别。前者定义数组,并将字符串常量拷贝至该数组,变量表示这个新数组的首地址。后者定义指针,指向一个字符常量。前者会产生新的字符串数据,并且拥有读写权限,后者不一定产生新字符串数据,并且只有读权限。

实验代码

  1. /**
  2. * @file char_array_pointer.cpp
  3. * @brief 测试字符数组和指针
  4. * @copyrigh public domain
  5. */
  6. #include <iostream>
  7. const char* string0() {
  8. const char* str = "string";
  9. return str;
  10. }
  11. const char* string1() {
  12. return "string";
  13. }
  14. const char* string2() {
  15. static const char str[] = "string";
  16. return str;
  17. }
  18. const char* string3() {
  19. char str[] = "string";
  20. return str;
  21. }
  22. void function() {
  23. char a[] = "abc123456";
  24. }
  25. void test_string1() {
  26. const char* str = string1();
  27. std::cout << "test_string1: " << str << std::endl;
  28. function();
  29. std::cout << "test_string1: " << str << std::endl;
  30. }
  31. void test_string2() {
  32. const char* str = string2();
  33. std::cout << "test_string2: " << str << std::endl;
  34. function();
  35. std::cout << "test_string2: " << str << std::endl;
  36. }
  37. void test_string3() {
  38. const char* str = string3();
  39. std::cout << "test_string3: " << str << std::endl;
  40. function();
  41. std::cout << "test_string3: " << str << std::endl;
  42. }
  43. int main() {
  44. std::cout << "string0 == string1 is " << (string0() == string1() ? "true" : "false") << std::endl;
  45. std::cout << "string1 == string2 is " << (string1() == string2() ? "true" : "false") << std::endl;
  46. test_string1();
  47. test_string2();
  48. test_string3();
  49. return 0;
  50. }

运行及结果

$ g++ char_array_pointer.cpp
char_array_pointer.cpp: In function 'const char* string3()':
char_array_pointer.cpp:24:10: warning: address of local variable 'str' returned [enabled by default]

$ ./a.exe
string0 == string1 is true
string1 == string2 is false
test_string1: string
test_string1: string
test_string2: string
test_string2: string
test_string3: string
test_string3: abc12345YP@




posted on 2016-04-20 21:51 lemene 阅读(66) 评论(1)  编辑 收藏 引用

评论

# re: CPPEXP —— char[]和char*的区别  回复  更多评论   

char[]和char*的区别 mark下
2016-04-20 23:49 | linda

只有注册用户登录后才能发表评论。
【推荐】超50万行VC++源码: 大型组态工控、电力仿真CAD与GIS源码库
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理