c++字符指针与字符串的问题

char*a;a="abcd"付给指针a的只能是地址(一个无符号长整形数)这个"abcd"不是指针地址为啥可以付给指针a难道"abcd"是个无符号长整形数。还有intb=... char*a;
a="abcd"
付给指针a的只能是地址(一个无符号长整形数)这个"abcd"不是指针地址为啥可以付给指针a难道"abcd"是个无符号长整形数。
还有int b=5,*a=&b;cout<<a<<endl;输出的是a的地址而char *a="123";cout<<a<<endl;输出的是a里面的字符串内容而不是a的地址
展开
 我来答
小鱼1979117
2011-02-04 · TA获得超过1.1万个赞
知道大有可为答主
回答量:1905
采纳率:0%
帮助的人:1117万
展开全部
简单回答一下你的各个问题,
"abcd"是一个字符串,在内存中肯定有自己的地址空间,char *a = "abcd"就是把这个地址空间赋给a保存的。"abcd"本身就是一个地址,因为在c语言中字符串就是对应于一个指针。
int b=5; *a = &b的这个,&b得到的是一个int*,是一个int型的指针,然后还要赋值给*a的话,可以知道a的类型是int**,就是指向指针的指针,无论如何,也是指针。所以输出的是地址值。
a作为char*的时候,送给cout的时候实际上是cout按字符串输出,你也可以看到a实际的地址指针值如:
cout << (long)a << endl;
或者你用更直接的方式看:
printf("address of a is %d, string is [%s]\n", a, a);
gaotongxiao
推荐于2016-03-03 · 超过25用户采纳过TA的回答
知道答主
回答量:76
采纳率:0%
帮助的人:64.5万
展开全部
为了避免LZ混乱,我帮你重写一次:
char *z;
z="abcd";
这段代码,实际上是将字符串abcd中a的地址赋给了指针z。
因为在执行z="abcd"的时候,程序首先在内存分配一个可供字符串abcd存放的内存空间,再将指针z设置为指向这段内存空间的第一个地址,也就是存放字符a的地址。

至于楼主的第二个问题……
注意一下,第一个cout<<a<<endl;输出的并不是a的地址,而是变量b的地址。
*a是解除指针引用的意思,也就是代表存放在指针a内的内存地址中所存放的数据。
因此,*a=&b实际意思是把变量b的实际内存地址赋给了a所储存的内存地址。cout的结果自然也就是b的内存地址了。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
roy_po
2011-02-05 · TA获得超过411个赞
知道小有建树答主
回答量:206
采纳率:0%
帮助的人:127万
展开全部
"int b=5,*a=&b;cout<<a<<endl;输出的是a的地址",这句话不对,输出的是b的地址,即就是a指向的内容,不信你输出&a,&b,看看。
"abcd"是一个字符串常量,存储在c++五大内存分区的常量区,是通过字符型指针来访问的,a="abcd"意思是a指向字符串"abcd",这里“赋值”你从内存角度理解就是“指向”;
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
tao1mylove
2011-02-04 · 超过36用户采纳过TA的回答
知道小有建树答主
回答量:157
采纳率:0%
帮助的人:104万
展开全部
abcd的地址赋给a了,那样的赋值就是给的地址,而输出的时候是要看输出的要求,如果是输出字符,就输出字符了,
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
乐创客
2021-05-08
知道答主
回答量:34
采纳率:0%
帮助的人:1.9万
展开全部

第五十六集 指针指向字符串

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式