一段简单程序理解指针,大家看看有没有问题

owldestiny 2009-03-09 09:52:13

#include <iostream>
using namespace std;
int main()
{
//指针是一个占用内存中存储空间的变量,变量本身有地址的,是用来存储地址的,
//指针的引用即为指针中存储的地址指向的内存中存储的数据
int *p1; //声明一个指针p1,未分配指针指向的地址
cout<<"&p1: "<<&p1<<endl;//输出该指针的地址
cout<<"p1: "<<p1<<endl;//输出该指针指向的地址
//cout<<*p<<endl;//输出该指针指向的地址中存储的内容,报错,内存不能read,没有指向任何地址

int t = 2;
int *p2;//声明一个指针q,未分配指针指向的地址
p2 = &t;//指针指向t的地址
cout<<"&t: "<<&t<<endl;//输出t的地址
cout<<"p2: "<<p2<<endl;//输出指针q中存储的内容,也就是t的地址
cout<<"&p2: "<<&p2<<endl;//输出指针q的地址
cout<<"*p2: "<<*p2<<endl;//输出p2指向的地址中存储的数据,即为t

int *p3 = new int; //声明一个指针,并在指针中存储一个地址,地址不定,是程序在内存中分配的
cout<<"p3: "<<p3<<endl;//输出p3存储的地址,也就是new int 得到的地址
cout<<"&p3: "<<&p3<<endl;//输出指针p3的地址
cout<<"*p3: "<<*p3<<endl;//输出new int 得到的地址中存储的数据,不定

int *p4 = new int;//输出p4存储的地址,也就是new int 得到的地址
cout<<"p4: "<<p4<<endl;//输出p4存储的地址,也就是new int 得到的地址
cout<<"&p4: "<<&p4<<endl;//输出指针p4的地址
cout<<"*p4: "<<*p4<<endl;//输出new int 得到的地址中存储的数据,不定
p4 = &t; //将t的地址赋值给p4
cout<<"p4: "<<p4<<endl;//输出p4中存储的地址,即为t的地址
cout<<"&p4: "<<&p4<<endl;//输出p4的地址
cout<<"*p4: "<<*p4<<endl;//输出p4指向的地址中存储的内容

system("pause");
}
...全文
251 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
owldestiny 2009-03-11
  • 打赏
  • 举报
回复
多谢大家了,小子受教了,有些说法不是太准确,main函数忘记返回值了,还有内存没有释放
jojotom 2009-03-09
  • 打赏
  • 举报
回复
了解
hoomien 2009-03-09
  • 打赏
  • 举报
回复
分析指针时,一定要搞清楚4点:
1.指针的类型
2.指针所指向的类型
3.指针所指向的内存区
4.指针本身所占据的内存区
  • 打赏
  • 举报
回复
int *p2;//声明一个指针q,未分配指针指向的地址
p2 = &t;//指针指向t的地址
cout<<"&t: "<<&t<<endl;//输出t的地址
cout<<"p2: "<<p2<<endl;//输出指针q中存储的内容,也就是t的地址 //理解应该没错,表述感觉有点不对,t的地址就是q的值,应该是说t的值.
cout<<"&p2: "<<&p2<<endl;//输出指针q的地址


luojc714 2009-03-09
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 jicy_luo 的回复:]
C/C++ code
p4 = &t; //将t的地址赋值给p4



貌似内存泄露了哦!
[/Quote]

不好意思,p3指向的内存也没有释放哈!
luojc714 2009-03-09
  • 打赏
  • 举报
回复

p4 = &t; //将t的地址赋值给p4

貌似内存泄露了哦!
xihuanlili 2009-03-09
  • 打赏
  • 举报
回复
向楼主学习
jakqigle 2009-03-09
  • 打赏
  • 举报
回复
lz可以再弄下const int *ptr和int* const ptr了;
rgmlkthh 2009-03-09
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 ypb362148418 的回复:]
引用 2 楼 hoomien 的回复:
分析指针时,一定要搞清楚4点:
1.指针的类型
2.指针所指向的类型
3.指针所指向的内存区
4.指针本身所占据的内存区



讲得很经典啊
[/Quote]
书上都这么说的。
霍大脚 2009-03-09
  • 打赏
  • 举报
回复
分析指针时,一定要搞清楚4点:
1.指针的类型
2.指针所指向的类型
3.指针所指向的内存区
4.指针本身所占据的内存区
ypb362148418 2009-03-09
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 hoomien 的回复:]
分析指针时,一定要搞清楚4点:
1.指针的类型
2.指针所指向的类型
3.指针所指向的内存区
4.指针本身所占据的内存区

[/Quote]

讲得很经典啊
ylfeng86 2009-03-09
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 feng4206yu 的回复:]
int *p3 = new int; //声明一个指针,并在指针中存储一个地址,地址不定,是程序在内存中分配的
我们习惯于说是在堆分配的内存..然后p3指向所分配的内存....
[/Quote]

其实用原来的说法更容易理解!
zhirom 2009-03-09
  • 打赏
  • 举报
回复
学习~
chenyingshu 2009-03-09
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 hoomien 的回复:]
分析指针时,一定要搞清楚4点:
1.指针的类型
2.指针所指向的类型
3.指针所指向的内存区
4.指针本身所占据的内存区
[/Quote]
我也是这么觉得的。指针就是要注意这几个方面。
liuysheng 2009-03-09
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 hoomien 的回复:]
分析指针时,一定要搞清楚4点:
1.指针的类型
2.指针所指向的类型
3.指针所指向的内存区
4.指针本身所占据的内存区
[/Quote]

我编译过,能通过,楼主的注释也没什么问题
.....
不过,输出结果好像不是那么回事,有问题...

学习....
luyaowei 2009-03-09
  • 打赏
  • 举报
回复
基本可以了解,只不过是习惯说法不同罢了。。。对了,我啰嗦下,楼主写程序要注意下,你的int main()函数没返回值。。。
sagegz 2009-03-09
  • 打赏
  • 举报
回复
//cout<<*p<<endl;//输出该指针指向的地址中存储的内容,报错,内存不能read,没有指向任何地址
不是没指向,因为指针没有初始化,不能够访问该指针指向的内容.
---------------------------------------------------------------------------------
cout<<"&p2: "<<&p2<<endl;//输出指针q的地址
是输出指针p2的地址.
---------------------------------------------------------------------------------
int *p4 = new int;//输出p4存储的地址,也就是new int 得到的地址
笔误了吧?
feng4206yu 2009-03-09
  • 打赏
  • 举报
回复
int *p3 = new int; //声明一个指针,并在指针中存储一个地址,地址不定,是程序在内存中分配的
我们习惯于说是在堆分配的内存..然后p3指向所分配的内存....
owldestiny 2009-03-09
  • 打赏
  • 举报
回复
我用的是vs2005没有报错
gaboyqiao 2009-03-09
  • 打赏
  • 举报
回复
p1没有说明指向何处,还能cout<<p1?我试了,要报错呢!

64,690

社区成员

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

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