指针数组问题

rcbblgy 2008-10-29 09:15:28
char *p = "abc";
cout<<*p;

输出的是a


char a[] = "abc";
char *p = a;
cout<<*p;

输出的是abc


char a[] = {'a','b','c'};
char *p = a;
cout<<*p;

输出的是abc,后面还有其它字符。


以上都是用vc6编译的


请问,前两种方式为什么输出不一样呢,最后一种方式为什么会出现乱码呢?指针这真的有点没搞懂。。。。
...全文
84 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
rcbblgy 2008-10-29
  • 打赏
  • 举报
回复
太菜了,呵呵。
rcbblgy 2008-10-29
  • 打赏
  • 举报
回复
哦,不好意思,是我写错了,第二段程序的count输出的p,而不是*p
jackxu1982 2008-10-29
  • 打赏
  • 举报
回复
你的这个问题很奇怪~

但从程序上面看

char *p = "abc";

是一个字符串的指针,P的地址是字符串的首地址,也就是a,如果输出的话,那么是a没错

char a[] = "abc";
char *p = a;

是一个字符数组的指针,P的地址是数组的首地址,也是a,输出的话,应该还是a

char a[] = {'a','b','c'};
char *p = a;
cout < <*p;

和第二个区别不大,只不过是赋值的方式不同,输出应该还是a

我通过 VC6以及VS2008都检测过程序了,输出的全部都是a,不知道你那边是怎么回事~~~,最好检查一下你的IDE是不是有什么问题
帅得不敢出门 2008-10-29
  • 打赏
  • 举报
回复

#include <iostream>
using namespace std;

int main()
{
char *p = "abc";
cout <<p << endl;

char a1[] = "abc";
char *p1 = a1;
cout <<p1<< endl;

char a2[] = {'a','b','c'};
char *p2 = a2;
cout <<p2<< endl;

return 0;
}

abc
abc
abc蘹
Press any key to continue
帅得不敢出门 2008-10-29
  • 打赏
  • 举报
回复

#include <iostream>
using namespace std;

int main()
{
char *p = "abc";
cout <<*p << endl;

char a1[] = "abc";
char *p1 = a1;
cout <<*p1<< endl;

char a2[] = {'a','b','c'};
char *p2 = a2;
cout <<*p2<< endl;

return 0;
}

a
a
a
Press any key to continue
xtting_8984313 2008-10-29
  • 打赏
  • 举报
回复
仿佛前两个都应该是a,lz确定是这样吗?
至于第三个,因为没有写结束标志'\0',所以溢出了。
帅得不敢出门 2008-10-29
  • 打赏
  • 举报
回复
楼主错了吧
输出对字符串数组有特殊处理,如果是cout << 字符串首址; 则会输入整个字符串的
frank_323 2008-10-29
  • 打赏
  • 举报
回复
1.*p是字符数据
2.*p指的是一个地址,a实际上是4位的
3.*p指的是一个地址,但是定义a的时候没有‘\0’,所有输出的时候后面会有乱码
个人理解
帅得不敢出门 2008-10-29
  • 打赏
  • 举报
回复
char *p = "abc";
cout <<*p; 你用的是*p相当于输出p[0]

输出的是a

char a[] = "abc";
char *p = a;
cout <<*p; 这里也应当输出a 如果是cout << p的话才会输出abc
输出的是abc

char a[] = {'a','b','c'};
char *p = a;
cout <<*p; 输出的还是a

如果是cout << p才会
输出的是abc,后面还有其它字符。 =======没有以'\0'结束 所以会输入直到遇到'\0'所以后面可能会有乱码

64,654

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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