社区
新手乐园
帖子详情
char * str = NULL; 与 char* str = "";有什么区别???
chenqi830521
2008-06-24 10:20:13
char * str = NULL; 与 char* str = "";有什么区别?
...全文
1790
12
打赏
收藏
char * str = NULL; 与 char* str = "";有什么区别???
char * str = NULL; 与 char* str = "";有什么区别?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用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, 而且空字符串是有地址空间的。
MySQL 数据类型和运算符
============================= # 数据类型 整数类型:五种 TINY SMALL MEDIUM INT BIG 浮点和定点小数类型:三种 FLOAT DOUBLE DECIMAL 日期与时间数据类型:五种 YEAR -1 字符串类型:二种
CHAR
(M) VAR
CHAR
(M) -1 ...
class
Str
ing{ public:
Str
ing(const
char
*
str
=
NULL
); // 普通构造函数
Str
ing(const St
class
Str
ing { public:
Str
ing(const
char
*
str
=
NULL
); // 普通构造函数
Str
ing(const
Str
ing &other); // 复制构造函数 ~
Str
ing(void); // 析构函数 private:
char
*m_data; // 用于保存字符串 };
str
ing ::
str
ing(const
char
*
str
)// 普通构造函数 { ...
容易混淆的问题在函数func中有
char
*
str
=“hello world”;当func执行结束后,会释放存放
str
的这段空间,而不是
str
指向的那段地址空间。
void func(
char
*
str
) {
str
= “hello world”; } void main(void) {
char
*p =
NULL
; func§; printf("%s\n",p); //段错误 } 区分一下 指针p的地址 和p所指向的空间的地址 刚开始p指向
NULL
; 把p传到func时,
str
= p =
NULL
; 此时
str
也指向
NULL
,p和
str
都指向
NULL
; 要想做到在func中操作
str
就等同于操作p,那就要让
str
的地址等于p的地址;而不是
str
本身等于p本
char
*a=0
char
*a=0是指给a所指的位置赋值'\0' 与
char
*a='\0'是一个意思 下面的例子可以说明:
char
str
[] = "abcdefg";
char
*ptr =
NULL
;prt =
str
+ 2; //指向c*prt = 0; //
str
为 ab,因为现在
str
[]=ab'\0'defg'\0'*prt = 'c'; //
str
为 abcdefg...
c语言
char
str
什意思,
char
*
str
与*
str
的
区别
#include#includeintmain(){
char
str
[100]={0};//
char
*
str
=
NULL
;gets(
str
);printf(“%s”,
str
);//fgets(
str
,100,stdin);//fputs(
str
,stdout);return0;}如上,本人用
char
str
[100]={0};初始化数组,运行后无错误。但是这样:
char
str
[100];...
新手乐园
33,311
社区成员
41,784
社区内容
发帖
与我相关
我的任务
新手乐园
C/C++ 新手乐园
复制链接
扫一扫
分享
社区描述
C/C++ 新手乐园
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章