新手求助char*
char *str="abc";中 str是一个指针变量,是用来存地址变量的 ,为什么可以把一个字符串赋值给str呢?字符串难道是地址吗? 本帖最后由 cyousui 于 2013-11-6 14:47 编辑字符串“abc”不是地址,是字符串,在这当中是将字符串“abc”的地址直接赋值给str,从反编译可以看出: mov dword ptr ,offset string "abc" 学习学习~~ char * str 的意思是:str是一个指针变量,也即 str 这个变量里面存放的是一个地址,这个地址所指向的空间中,存放的是字符串“abc”。 本帖最后由 龙羽 于 2013-11-6 14:59 编辑
cyousui 发表于 2013-11-6 14:44 static/image/common/back.gif
字符串“abc”不是地址,是字符串,在这当中是将字符串“abc”的地址直接赋值给str,从反编译可以看出: mo ...
你是说“将字符串“abc”的地址直接赋值给str”可是我直接cout<<str;得到的结果不是地址值啊 结果就是abc这个是为什么呢?那这个指针保存的不是地址变量吗? 本帖最后由 龙羽 于 2013-11-6 15:04 编辑
以学为乐 发表于 2013-11-6 14:57 static/image/common/back.gif
char * str 的意思是:str是一个指针变量,也即 str 这个变量里面存放的是一个地址,这个地址所指向的空间中 ...
哦 明白了 那这个赋值是经过运算符重载的吗?还有点不解 为什么cout<<str;得到的结果是abc,指针变量里存的怎么会是个abc呢? 由于C++标准库中I/O类对<<操作符重载,因此在遇到字符型指针时会将其当作字符串名来处理,输出指针所指的字符串。既然这样,那么我们就别让它知道那是字符型指针,所以得用到强制类型转换,不过不是C的那套,我们得用static_cast来实现,把字符串指针转换成无类型指针,这样更规范,如下:
cout<<static_cast<const void *>(str)<<endl; cyousui 发表于 2013-11-6 15:04 static/image/common/back.gif
由于C++标准库中I/O类对
非常感谢(不到十个字不让发啊) 看看不说话 指针变量 当然是用来存储指针的
不是存储地址
str是一个char*类型变量 存储char*
"123"
是一个char 在这里会隐式转换为指向数组第一个元素的 指针
数组的元素的数据类型是char 指向第一个元素的指针自然就是char*类型的了 其实,我觉得你应该去理解那个双引号。它有申请了空间,存放的是里边的字符串,并且在字符串尾部加上了‘\0’返回的是一个地址。
页:
[1]