解释下指针的问题 迷糊

crospo 2009-06-12 03:10:27
#include "stdafx.h"
#include <iostream.h>
int main(int argc, char* argv[])
{
char str[30]="hello one world";
char *p=&str[0] ;
cout<<"*p ="<<*p<<endl; //从首地址中取出相应的值
cout<<"p ="<<p<<endl; //这个我有点不明白?p是不是应该是个地址啊

/*****************************************************/
char a[20]="you_are_a_gril";
int *p=(int *)a ;//被初始化整形变量a 什么意思
cout<<"*p="<<*p<<endl; //为什么是随机值?
p+=1;
cout<<"*p="<<*p<<endl; //为什么是随机值?
/*****************************************************/
return 0;
}
...全文
35 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
yidianxz 2009-06-12
  • 打赏
  • 举报
回复
p是指针变量,用来存地址的,而*p是指向地址中的内容。
pathuang68 2009-06-12
  • 打赏
  • 举报
回复
飞天御剑流 2009-06-12
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 crospo 的回复:]
/*****************************************************/
char a[20]="you_are_a_gril";
int *p=(int *)a ;//被初始化整形变量a 什么意思
cout < <"*p=" < <*p < <endl; //*p =1601531769 ???
p+=1;
cout < <"*p=" < <*p < <endl; //*p =1600483937 ???
/*****************************************************/…
[/Quote]

那不是ascii,在上述代码中p是指向int类型的指针,因此*p就是它指向的int值,由于把a地址在int *p=(int *)a 中赋予了p,其实就是把"you_are_a_gril"字符串前几个字节的内容当成整数值打印出来了。
crospo 2009-06-12
  • 打赏
  • 举报
回复
/*****************************************************/
char a[20]="you_are_a_gril";
int *p=(int *)a ;//被初始化整形变量a 什么意思
cout < <"*p=" < <*p < <endl; //*p =1601531769 ???
p+=1;
cout < <"*p=" < <*p < <endl; //*p =1600483937 ???
/*****************************************************/
是什么值 ascii????再问下
lylm 2009-06-12
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 lylm 的回复:]
cout < <"p =" < <p < <endl; //这个我有点不明白?p是不是应该是个地址啊
>>没错,p是个地址,具体行为要看怎么实现,在ostream中重载了操作符 < <,打印这个c字符串
[/Quote]

LZ对重载没有概念吧?

简单说,cout<<p相当于调用函数,代码类似

for(;*p!='\0';p++)
cout<<*p;
crospo 2009-06-12
  • 打赏
  • 举报
回复
哦 明白了 谢谢
crospo 2009-06-12
  • 打赏
  • 举报
回复
cout < <"p =" < <p < <endl; //这个我有点不明白?p是不是应该是个地址啊
楼上的你说的对啊 输出了hello one world
怎麽重载了 为什么不是地址啊 在帮解释下
  • 打赏
  • 举报
回复
cout < <"p =" < <p < <endl; //这个我有点不明白?p是不是应该是个地址啊

没错
printf("%p\n",p);
会是输出地址。
但是cout有的编译器会输出字符数组的全部内容。
飞天御剑流 2009-06-12
  • 打赏
  • 举报
回复
p的类型是char*,cout打印此类型的变量时,输出的是它指向的字符串,想打印p的值的话,只要把p转换为非char*类型就行了,例如:

(void*)p、(int*)p或者(float*)p都可以,就是

cout < <"p =" < <(int*)p < <endl;
lylm 2009-06-12
  • 打赏
  • 举报
回复
cout < <"p =" < <p < <endl; //这个我有点不明白?p是不是应该是个地址啊
>>没错,p是个地址,具体行为要看怎么实现,在ostream中重载了操作符<<,打印这个c字符串
coverallwangp 2009-06-12
  • 打赏
  • 举报
回复
p是个地址,*p是地址中的内容
Gone2009 2009-06-12
  • 打赏
  • 举报
回复
cout < <"p =" < <p < <endl; //这个我有点不明白?p是不是应该是个地址啊
这里<<被重载
crospo 2009-06-12
  • 打赏
  • 举报
回复
cout < <"p =" < <p < <endl; //这个我有点不明白?p是不是应该是个地址啊
coverallwangp 2009-06-12
  • 打赏
  • 举报
回复
/*****************************************************/
char a[20]="you_are_a_gril";
int *p=(int *)a ;//被初始化整形变量a 将a的首地址赋值给了p
cout < <"*p=" < <*p < <endl; //输出的应该是'y'的ascii码
p+=1;
cout < <"*p=" < <*p < <endl; //为什么是随机值?输出的应该是'o'的ascii码
/*****************************************************/

33,319

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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