首页  > 世界杯女主持人 > 请教,如何得到一个指针的地址?

请教,如何得到一个指针的地址?

世界杯女主持人 2025-05-08 10:20:15 872

社区

C语言 帖子详情 请教,如何得到一个指针的地址? wialways 2004-07-25 04:30:15 int *p1=0;

int a=100;

p1=&a;

cout<<*p1<

cout<

这是得到的结果应该是变量 a的值和 a所在的地址。

我们知道指针自己也有一个地址。

应该怎么得到指针自己的地址呢??

谢谢

...全文

329 19 打赏 收藏 请教,如何得到一个指针的地址? int *p1=0; int a=100; p1=&a; cout<<*p1<

扫一扫 分享 转发到动态 举报

写回复 配置赞助广告取 消

确 定

用AI写文章 19 条回复 切换为时间正序 请发表友善的回复… 发表回复 打赏红包 需支付: 0.00 元 取 消 确 定 wialways 2004-07-25 打赏举报 回复 分太少。招待不周呀。

以后有机会再加。谢谢 wialways 2004-07-25 打赏举报 回复 真的非常谢谢大家。

分数有限。。只能意思一下啦 renheihei 2004-07-25 打赏举报 回复 下面程序不能运行的原因:

仔细看你的*p=b;(*p)是a数组的第一个元素,你个它赋个指针的值是什么意思呢?

楼主犯了一个错误,int* p=a,是声明a为指针,*是int的,可不是a的!

#include

using namespace std;

void main()

{

int a[2]={1,2};

int b[2]={3,4};

int *p=b;

*p=a;//改变p.让指针P指向a

cout<<*p<

cout<

cout<<&a<

}

demo001 2004-07-25 打赏举报 回复 因为int *P的时候并没有给P指针赋值

也就是说它指向的地址不明确,是个野指针

这时候*p=a

你对着一块未知的内存区域赋值是很危险的

后果难以预料

而编译的时候,很多Compiler不会对此做出检查的

p=&a

他是让P指向a所在的地址,由于这时候a已经占有了一块安全的内存

你只是将P指向这块内存而已

所以不会有什么问题 zwl327 2004-07-25 打赏举报 回复 是这样的:

int *p;

*p=a;

之所以不对,是因为指针p没有申请有效的存储空间,也就是说,是个空指针,指针指向为空,所以无法在*p 下存任何东西,真要这样用的话先给指针手动申请空间,改成如下:

int *p;

p = new int;

*p=a;

而你下面的用法,是你先把值存于a; 然后把指针指向a.这时,如果你再改变a的值,*p同样会变,这就是和上面不同的地方,上面的用法在做了*p = a;后对a的改变是不会对指针指向的值有影响的.

总之,*p = a;是把a的值赋给*p;

而 p = &a;是吧指针指向a变量的地址

wialways 2004-07-25 打赏举报 回复 大家看看这个例子。。。。

#include

using namespace std;

void main()

{

int a=0;

int *p;

*p=a;

cout<<*p<

}

能编译,但是不能运行。

改成这样就行了

#include

using namespace std;

void main()

{

int a=0;

int *p;

p=&a;

cout<<*p<

}

请问这是为什么呀。

麻烦大家了。。。。。。。

wialways 2004-07-25 打赏举报 回复 我就在一直在看书。在看书的过程中发现的问题。 ttlb 2004-07-25 打赏举报 回复 #include

using namespace std;

void main()

{

int a[2]={1,2};

int b[2]={3,4};

int *p=b;

p=a;//改变p.让指针P指向a

cout<<*p<

cout<

cout<<&a<

}

wialways 2004-07-25 打赏举报 回复 关于上面的例子。我知道可以把

*p=a

改成*p=a[0] 或p=&a[0]。就能达到目的。

可是我想知道是。为什么 int *p=a 可以。但后面再写*p=b却不行? angelboycn 2004-07-25 打赏举报 回复 去看书吧。。。。看书效率高的多~ wialways 2004-07-25 打赏举报 回复 请大家看看这个例子

#include

using namespace std;

void main()

{

int a[2]={1,2};

int b[2]={3,4};

int *p=b;

cout<<*p<

cout<

cout<<&a<

}

这个程序能够正确编译运行。

#include

using namespace std;

void main()

{

int a[2]={1,2};

int b[2]={3,4};

int *p=b;

*p=a;//改变p.让指针P指向a

cout<<*p<

cout<

cout<<&a<

}

这个程序不能编译

请问这个问题出在哪呢? wialways 2004-07-25 打赏举报 回复 谢谢谢谢。。。。

。。

再请问一下

*p1=a

与 p1=&a

有什么不同吗?

本质的区别在哪里。

whyglinux 2004-07-25 打赏举报 回复 *p1=a;

本身没有语法错误,所以能通过编译。但能成功执行这一句的前提条件是你已经通过初始化或者赋值是指针 p1 指向了一个有效的存储空间。在你的程序中你执行这一句之前 p1 = 0,p1指向的内存是不能被程序访问的;这样的访问错误只有在程序运行时才能体现出来。 demo001 2004-07-25 打赏举报 回复 不会吧

没有什么不对吧 cyh811122 2004-07-25 打赏举报 回复 *p1=a;

编绎无错,但程序运行的时候出现错误,

请问这样写有什么不对吗?

指针是运行时才分配存储空间也就是所谓的动态的分配存储空间,所以这种错误只有在运行时才能检测出来。 ccchhhhhh 2004-07-25 打赏举报 回复 这样对啊?

只要之前a有符值就行啊! wialways 2004-07-25 打赏举报 回复 楼上的大哥。

为什么我在程序里写

*p1=a;

编绎无错,但程序运行的时候出现错误,

请问这样写有什么不对吗? wialways 2004-07-25 打赏举报 回复 呀。。

我倒。

谢谢 youngphoneix 2004-07-25 打赏举报 回复 &p1 0x00000000内存不能为read修复工具 该内存不能为“read”或“written解决方案

运行某些程序的时候,有时会出现内存错误的提示,然后该程序就关闭。

“0x????????”指令引用的“0x????????”内存。该内存不能为“read”。

“0x????????”指令引用的“0x????????”内存,该内存不能为“written”。

一般出现这个现象有方面的,一是硬件,即内存方面有问题,二是软件,这就有多方面的问题了。

故障分析

硬件方面:

一般来说,内存出现问题的可能性并不大,主要方面是:内存条坏了、内存质量有问题,还有就是 2 个不

同牌子不同容量的内存混插,也比较容易出现不兼容的情况,同时还要注意散热问题,特别是超频后。你

可以使用MemTest 这个软件来检测一下内存,它可以彻底的检测出内存的稳定度。

假如是双内存,而且是不同品牌的内存条混插或者买了二手内存时,出现这个问题,这时,就要检查是不

是内存出问题了或者和其它硬件不兼容。

软件方面:

先简单说说原理:内存有个存放数据的地方叫缓冲区,当程序把数据放在其一位置时,因为没有足够空间,

就会发生溢出现象。举个例子:一个桶子只能将一斤的水,当放入两斤的水进入时,就会溢出来。而系统

则是在屏幕上表现出来。这个问题,经常出现在 windows2000 和 XP 系统上,Windows 2000/XP 对硬件的

要求是很苛刻的,一旦遇到资源死锁、溢出或者类似 Windows 98 里的非法操作,系统为保持稳定,就会出

现上述情况。另外也可能是硬件设备之间的兼容性不好造成的。

几个例子

例一:打开 IE 浏览器或者没过几分钟就会出现"0x70dcf39f"指令引用的"0x00000000"内存。该内存不能为

“read”。要终止程序,请单击“确定”的信息框,单击“确定”后,又出现“发生内部错误,您正在使用的其中

一个窗口即将关闭”的信息框,关闭该提示信息后,IE浏览器也被关闭。

解决方法:修复或升级 IE 浏览器,同时打上补丁。看过其中一个修复方法是,Win2000 自升级,也就是

Win2000升级到Win2000,其实这种方法也就是把系统还原到系统初始的状态下。比如你的IE升级到了6.0,

自升级后,会被IE5.0代替。

例二:在windows xp下双击光盘里面的“AutoRun.exe”文件,显示“0x77f745cc”指令引用的“0x00000078”内

存。该内存不能为“written”,要终止程序,请单击“确定”,而在Windows 98里运行却正常。

解决方法:这可能是系统的兼容性问题,winXP 的系统,右键“AutoRun.exe”文件,属性,兼容性,把“用

兼容模式运行这个程序”项选择上,并选择“Windows 98/Me”。win2000如果打了SP的补丁后,只要开始,

运行,输入:regsvr32 c:\winnt\apppatch\slayerui.dll。右键,属性,也会出现兼容性的选项。

例三:RealOne Gold关闭时出现错误,以前一直使用正常,最近却在每次关闭时出现“0xffffffff”指令引用的

“0xffffffff”内存。该内存不能为“read” 的提示。

解决方法:当使用的输入法为微软拼音输入法 2003,并且隐藏语言栏时(不隐藏时没问题)关闭 RealOne

就会出现这个问题,因此在关闭 RealOne 之前可以显示语言栏或者将任意其他输入法作为当前输入法来解

决这个问题。

例四:我的豪杰超级解霸自从上网后就不能播放了,每次都提示“Ox060692f6”(每次变化)指令引用的

“Oxff000011”内存不能为“read”,终止程序请按确定。

解决方法:试试重装豪杰超级解霸,如果重装后还会,到官方网站下载相应版本的补丁试试。还不行,只好

换就用别的播放器试试了。

例五:双击一个游戏的快捷方式,“Ox77f5cdO”指令引用“Oxffffffff”内存,该内存不能为“read” ,并且提示

Client.dat程序错误。

解决方法:重装显卡的最新驱动程序,然后下载并且安装DirectX9.0。

例六:一个朋友发信息过来,我的电脑便出现了错误信息:“0*772b548f”指令引用的“0*00303033”内存,该

内存不能为“written”,然后QQ自动下线,而再打开QQ,发现了他发过来的十几条的信息。

解决方法:这是对方利用QQ的BUG,发送特殊的代码,做QQ出错,只要打上补丁或升级到最新版本,

就没事了。

例七:我的笔记本电脑用的XP系统,有时关闭网页时会弹出tbrowser.exe遇到问题需要关闭,然后有弹出

0x03e7c738指令引用的0x03e7c738内存,该内存不能为read,请问是怎么回事?

解决方法:先查杀一下病毒,另外如果你安装了浏 武汉理工大学C语言实验参考答案2020.rar 武汉理工大学C语言实验题库,2020版本,参考答案。即使是未来的题库,相差也不会很大,顶多是变更几道题,删几道,新几道,具有良好的参考价值,认真做完,满分不难。学姐也是满分。 数据结构与算法分析实验报告.doc 《数据结构与算法分析》实验报告 姓名 学号_ _____ __年 __月__ __日 上机题目:以静态链表为存储结构,编写给定权值{7,19,2,6,32,3}构造哈夫曼树的 算法。 (输出以存储结构表示或以树型显示(90度旋转)) 需求分析 1. 输入数据必须为int的整形数据,其数值范围为:-~47 2. 输出的数据格式为:%d 3. 测试数据的数据为:{7,19,2,6,32,3} 详细设计 1. 该程序采用顺序表的存储结构,其数据结构定义如下: #define n 6 #define m 2*n-1 #define max 100typedef struct {int data; int lchild,rchild,prnt; }hufmtree; 所用数据类型中每个操作的伪码算法如下: 创建哈夫曼树 Program hufm(hufmtree t[m]) FOR i=0;i 如何学好C语言 什么东西学习起来都要从其特点分析入手,并制定相应计划,方法也很重要,C语言也不例外 matlab 获得指针对应的值,matlab能返回指针和接受指针吗? 该楼层疑似违规已被系统折叠隐藏此楼查看此楼我写了一个C++文件tdbconnect.cpp,想通过matlab调用该文件中的函数。在tdbconnect.cpp中有mexFunction函数,你们晓得是什么函数的。在mexFunction函数中,我创建了一个指针void *的,现在想返回出来,给另一个函数使用。但是,指针有问题了。纠结啊!!!!!!!具体如下:1. tdbconnect.cpp ...

C语言

70,005

社区成员

243,256

社区内容

发帖 与我相关 我的任务 C语言 C语言相关问题讨论 复制链接

扫一扫 分享 确定 社区描述 C语言相关问题讨论 社区管理员

加入社区

获取链接或二维码

近7日

近30日

至今

加载中

查看更多榜单

社区公告

暂无公告 试试用AI创作助手写篇文章吧

+ 用AI写文章


友情链接:
Copyright © 2015 冲击世界杯_2002韩日世界杯 - 0534pos.com All Rights Reserved.