char * str = NULL; 与 char* str = "";有什么区别???

chenqi830521 2008-06-24 10:20:13
char * str = NULL; 与 char* str = "";有什么区别?
...全文
1790 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
chenqi830521 2008-06-26
  • 打赏
  • 举报
回复
char* str = NULL;
只是在栈区声明了一个char类型的指针str(4个字节)
这个指针=NULL(也即0)
也就说它不指向任何变量
它的内容(即它保存的地址)为0x0000 0000(16进制的8个0)

char* str = "";
不仅在栈区声明了一个char类型的指针str
而且这个指针指向了数据区的空字符串""
所以str本身的内容是有一个具体的地址值的
空字符串占一个字节来保存'\0'

我们可以通过底下的代码测试到:
#include <iostream>
using namespace std;

int main()
{
char* str1 = NULL;
//cout << str1 << endl; //str1=NULL,不指向任何变量或常量,不能输出str1的内容(值)
cout << (void*)str1 << endl; //输出str1的地址

char* str2 = "";
cout << str2 << endl; //输出str2的内容(值)
cout << (void*)str2 << endl; //输出str2的地址

char* str3 = "ABC"; //字符串常量存放于数据区
cout << str3 << endl; //str3指向数据区的"ABC",可以输出str3的内容(值)
cout << (void*)str3 << endl; //输出str3的地址,与str2的地址连续,
//所以可以证明str2所指的空字符""也存在数据区
return 0 ;
}
运行结果:
00000000 //str1的地址
//str2的内容,空字符""
0046C020 //str2的地址
ABC //str3的内容,字符串"ABC"
0046C01C //str3的地址,与0046C020均为数据区地址
Press any key to continue

有谁愿意探讨可以加47058294
Ethan_yushui213 2008-06-25
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 aozhi 的回复:]
char *str = ""现在的状态是指向静态内存中的某个地址,在这个地址上的内存单元的值是0。
而char *str = NULL指向的地址是空。
[/Quote]
win9886 2008-06-25
  • 打赏
  • 举报
回复
1楼的说的正确
aozhi 2008-06-25
  • 打赏
  • 举报
回复
char *str = ""现在的状态是指向静态内存中的某个地址,在这个地址上的内存单元的值是0。
而char *str = NULL指向的地址是空。
jiaorong 2008-06-25
  • 打赏
  • 举报
回复
谢谢, 学习了, 刚入门,请各位大大多多指教~
hahaysw 2008-06-25
  • 打赏
  • 举报
回复
学习了,谢谢~
ForestDB 2008-06-25
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 Michael_555 的回复:]
char *str = NULL //申明字符串指针str并让它指向空地址
char *str = "" //申明字符串指针str并让它指向空字符串

空字符串不是空地址,空地址就是0, 而且空字符串是有地址空间的。
[/Quote]
jyh_baoding 2008-06-25
  • 打赏
  • 举报
回复
1楼说的很对,赞成
cross2 2008-06-25
  • 打赏
  • 举报
回复

明湖居士2018 2008-06-25
  • 打赏
  • 举报
回复
char *str = NULL //申明字符串指针str并让它指向空地址
char *str = "" //申明字符串指针str并让它指向空字符串

再说的详细点,char *str = NULL 会申请一个空指针,但是空指针的值并不一定就是0,也有可能是0xcccccccc这样的值,建议你跟进去调试看看。但是空指针是肯定的;char *str = "" 会申请一个指针,并将其指向一个内存空间,这个空间中放的是空字符。
sansan5233 2008-06-24
  • 打赏
  • 举报
回复
谢谢楼上哦,我也学到了!
Michael_555 2008-06-24
  • 打赏
  • 举报
回复
char *str = NULL //申明字符串指针str并让它指向空地址
char *str = "" //申明字符串指针str并让它指向空字符串

空字符串不是空地址,空地址就是0, 而且空字符串是有地址空间的。

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧