龙羽 发表于 2013-11-6 14:30:06

新手求助char*

char *str="abc";中 str是一个指针变量,是用来存地址变量的 ,为什么可以把一个字符串赋值给str呢?字符串难道是地址吗?

cyousui 发表于 2013-11-6 14:44:37

本帖最后由 cyousui 于 2013-11-6 14:47 编辑

字符串“abc”不是地址,是字符串,在这当中是将字符串“abc”的地址直接赋值给str,从反编译可以看出: mov dword ptr ,offset string "abc"

べ惟爱伊. 发表于 2013-11-6 14:55:35

学习学习~~

以学为乐 发表于 2013-11-6 14:57:34

char * str 的意思是:str是一个指针变量,也即 str 这个变量里面存放的是一个地址,这个地址所指向的空间中,存放的是字符串“abc”。

龙羽 发表于 2013-11-6 14:58:41

本帖最后由 龙羽 于 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:00:57

本帖最后由 龙羽 于 2013-11-6 15:04 编辑

以学为乐 发表于 2013-11-6 14:57 static/image/common/back.gif
char * str 的意思是:str是一个指针变量,也即 str 这个变量里面存放的是一个地址,这个地址所指向的空间中 ...
哦 明白了 那这个赋值是经过运算符重载的吗?还有点不解 为什么cout<<str;得到的结果是abc,指针变量里存的怎么会是个abc呢?

cyousui 发表于 2013-11-6 15:04:56

由于C++标准库中I/O类对<<操作符重载,因此在遇到字符型指针时会将其当作字符串名来处理,输出指针所指的字符串。既然这样,那么我们就别让它知道那是字符型指针,所以得用到强制类型转换,不过不是C的那套,我们得用static_cast来实现,把字符串指针转换成无类型指针,这样更规范,如下:
cout<<static_cast<const void *>(str)<<endl;

龙羽 发表于 2013-11-6 15:17:43

cyousui 发表于 2013-11-6 15:04 static/image/common/back.gif
由于C++标准库中I/O类对

非常感谢(不到十个字不让发啊)

muller8 发表于 2013-11-6 17:18:52

看看不说话

我是师兄 发表于 2013-11-6 17:51:31

指针变量 当然是用来存储指针的
不是存储地址
str是一个char*类型变量 存储char*
"123"
是一个char 在这里会隐式转换为指向数组第一个元素的 指针
数组的元素的数据类型是char 指向第一个元素的指针自然就是char*类型的了

eleven_xxq 发表于 2013-11-7 09:15:54

其实,我觉得你应该去理解那个双引号。它有申请了空间,存放的是里边的字符串,并且在字符串尾部加上了‘\0’返回的是一个地址。
页: [1]
查看完整版本: 新手求助char*