指针的使用?

songlaf 2006-04-18 11:57:57
有这两段代码:
代码A:
char *ptr = "How to do it!";
while(*ptr++)
{
cout<<ptr<<endl;
}
代码B:
int i = 100;
int *ptr = &i;
while(*ptr++)
{
cout<<ptr<<endl;
}
为什么,代码A输出的是字符串,而不是地址,可是代码B输出的是地址?

另外为什么可以用char *ptr = "hello hi";而不可用int *prt = 100;
...全文
166 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
lei001 2006-04-19
  • 打赏
  • 举报
回复
char *ptr = "How to do it!";
先分配一个常量存放“How to do it!”,然后让ptr指向这个变量;
而int *prt = 100,就没有这么好的“运气”了,不会分配一个变量来存放100,
因此无法知道prt指向谁的,因此出错的
NUmen123 2006-04-19
  • 打赏
  • 举报
回复
char *ptr = "hello hi";是编译器将字符串常量的第一个字符地址赋给字符指针作为初始值。并不是赋值给指针~。"hello hi"不属于指针ptr,反过来是指针ptr依附它。
int *prt = 100;是将一个整形数赋给指针~这是错误的~~
archerchun 2006-04-19
  • 打赏
  • 举报
回复
第二段程序只是输出指针指向的地址,所以不是错误的
lxfxw 2006-04-19
  • 打赏
  • 举报
回复
楼上讲的对,代码是一个明显并且严重的错误!!

我很奇怪,这样的代码能正常运行吗????int型越界
road1981 2006-04-19
  • 打赏
  • 举报
回复
代码A:
char *ptr = "How to do it!";
while(*ptr++)
{
cout<<ptr<<endl;
}
这段代码中,ptr始终指向一个c风格的字符串,所以输出当然就是字符串了
代码B:
int i = 100;
int *ptr = &i;
while(*ptr++)
{
cout<<ptr<<endl;
}
这段代码中,while(*ptr++)实际上会导致指针指向未知的内存空间,属于明显的错误
Muf 2006-04-19
  • 打赏
  • 举报
回复
[unsigned] char* 是C运行库特殊处理的。在C中认为是字串;因此表现不能与int*等同。
bobojing8841 2006-04-19
  • 打赏
  • 举报
回复
ostream& os<<(ostream&,char*)已经重载过,所以能通过输入指针输出字符串
逸学堂 2006-04-19
  • 打赏
  • 举报
回复
代码B:
int i = 100;
//int *ptr = &i;
int *ptr = i; // 而不是地址。
while(*ptr++)
{
cout<<ptr<<endl;
}
sankt 2006-04-19
  • 打赏
  • 举报
回复
1.
char *ptr = "How to do it!";
while(*ptr++)
{
cout<<static_cast<void*>(ptr)<<endl; //这样就ok了
}
2.
另外为什么可以用char *ptr = "hello hi";而不可用int *prt = 100;

//============
char *ptr = "hello hi";//这个意味ptr指向"hello hi"的首地址 它实质是const char *ptr="hello hi";

int* ptr =100 //这是错误的,
必须要这样写:
int i=100;
int* p = &i;







awl005 2006-04-19
  • 打赏
  • 举报
回复
这里错了
char* a='a';
cout<<a;
改成
char a='a'
char* pa=&a
cout<<pa
awl005 2006-04-19
  • 打赏
  • 举报
回复
为什么,代码A输出的是字符串,而不是地址,可是代码B输出的是地址?

因为C没有基本字符串类型,所以它用元素为字符类型,最后一个元素为0的数组来"模拟"字符串,既然模拟字符串,输出它的时候总不能给出地址,而是将这个数组的元素一个一个都输出来,直到碰到0

就算是这样:

char* a='a';
cout<<a;
也不会输出地址,大多数情况下是a后面跟着一堆乱七八糟的东西,会停下来是因为碰到0了



另外为什么可以用char *ptr = "hello hi";而不可用int *prt = 100;

"hello hi"的类型就是char*(严格来说是 const char* const), 而100的类型是int


64,654

社区成员

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

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