指针的问题!!求帮忙

dengchaozhu 2011-07-28 02:43:08
简洁点
void Func1()
{
ULONG *AA;
ULONG *BB
Func2(&AA);

DbgPrint("%x",*AA); //此打印出的数字是对的1234
BB=(*AA)+1; 为什么这样打印就不对了 打印出别的数字我想打印1235
}
void Func2(ULONG **AA)
{
ULONG *DD;
ULONG D;
DD=&D
Func3(DD);

*AA=DD;

}
void Func3(ULONG *DD)
{
ULONG FF=1234;
*DD=FF; //赋给D了
}
...全文
479 23 打赏 收藏 转发到动态 举报
写回复
用AI写文章
23 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhanghuabo 2011-08-01
  • 打赏
  • 举报
回复
你的问题没看,
我只想说一句,
C语言变量, 他有自己的地址, 内存, 内存里面的内容是 他所指代的内容。
int a = 45;
int *b = &a;(假设b = 0x4579841);
a 的地址是0x4579841, 内容是45

b的地址不知道,他的内容是 0x4579841;

C语言函数实际上都是值传递,只是传的是指针值,还是变量值。

你要修改一个对象,你必须传他的指针。

你要修改指针的时候必须传递指针的指针。
dengchaozhu 2011-07-30
  • 打赏
  • 举报
回复
[Quote=引用 21 楼 qingmingcom 的回复:]
野指针乱飞,用java的表示压力大。
[/Quote]
哈哈 你很有意思
dengchaozhu 2011-07-29
  • 打赏
  • 举报
回复
[Quote=引用 18 楼 frais 的回复:]
我给你改了下可以用的
指针使用前必须被赋值,你的指针基本都是这样的
void Func1()
{
ULONG *AA;
ULONG *BB;

ULONG a=0;
ULONG b=0;
AA = &a;
BB = &b;
Func2(&AA);


DbgPrint("%d",*AA); //此打印出的数字是对的1234
……
[/Quote]
感谢你们的热心 呵呵
结贴吧 到今天 我不得不自己写代码了 上面那段代码是人家写的
驱动代码,可能与ring3层的有点不同
qingmingcom 2011-07-29
  • 打赏
  • 举报
回复
野指针乱飞,用java的表示压力大。
hacqing 2011-07-29
  • 打赏
  • 举报
回复

我被雷到了...
hzy694358 2011-07-28
  • 打赏
  • 举报
回复
void Func3(ULONG *DD)
{
ULONG FF=1234;
*DD=FF; //赋给D了
}
=================
DD没有指向某个分配的空间
这个函数出去,FF就释放掉了
DD也就变成野指针了
sc_gw 2011-07-28
  • 打赏
  • 举报
回复
代码有问题。
AA通过调用Func2 函数 等同于DD;
DD指向的是D;
D的生命周期为Func2函数内,退出此函数就表示AA指向的是一个无效地址,有可能被回收。
dengchaozhu 2011-07-28
  • 打赏
  • 举报
回复
杯具 没人回答
等待升级 2011-07-28
  • 打赏
  • 举报
回复
我给你改了下可以用的
指针使用前必须被赋值,你的指针基本都是这样的
void Func1()
{
ULONG *AA;
ULONG *BB;

ULONG a=0;
ULONG b=0;
AA = &a;
BB = &b;
Func2(&AA);


DbgPrint("%d",*AA); //此打印出的数字是对的1234
*BB=(*AA)+1;//
}
void Func2(ULONG **AA)
{
ULONG *DD;
ULONG D;
DD=&D;
Func3(DD);

*(*AA)=*DD; //
}
void Func3(ULONG *DD)
{
ULONG FF=1234;
*DD=FF; //赋给D了
}
等待升级 2011-07-28
  • 打赏
  • 举报
回复
void Func1()
{
ULONG *AA;
ULONG *BB
Func2(&AA);

DbgPrint("%x",*AA); //此打印出的数字是对的1234
BB=(*AA)+1;//指针=变量值?左边是指针,右边是变量值,编译也许能过,但这是错误的
}
void Func2(ULONG **AA)
{
ULONG *DD;
ULONG D;
DD=&D;//局部指针指向局部变量,请牢记该含义
Func3(DD);

*AA=DD; //指针*AA同样指向了局部变量指针,函数调用结束AA将迷途

}
void Func3(ULONG *DD)
{
ULONG FF=1234;
*DD=FF; //赋给D了
}
xiaobaihongye404 2011-07-28
  • 打赏
  • 举报
回复
问题就出现在func2上,你和func3相比一下,有什么不同的地方,就最后赋值的地方比较
c372662316 2011-07-28
  • 打赏
  • 举报
回复
楼主,指针搞错了,
void Func1()
{
ULONG *AA;
ULONG *BB
Func2(AA); 、 改下

DbgPrint("%x",*AA);
BB=(*AA)+1;
}
void Func2(ULONG *AA) 、、 这里改下
{
ULONG *DD;
ULONG D;
DD=&D
Func3(DD);

*AA=*DD; 、、 改下

}
void Func3(ULONG *DD)
{
ULONG FF=1234;
*DD=FF; //赋给D了
}
dengchaozhu 2011-07-28
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 pathuang68 的回复:]
楼主你想干什么?
记住不要随便给指针赋值。

从你11楼给出的代码来看,你还没有弄清*和&,比如:

C/C++ code


ULONG *AA;
...
//再次输出来看看
Kdprint(("地址是: %x",*AA)); // *AA是地址码?!



楼主还是先从最基本学起吧。这么基本的东西必须要搞得比较透彻才行,否则后面没有办法继续。

……
[/Quote]
没事 来是求教的 从一楼的代码来看Kdprint(("地址是: %x",*AA)); 是D里面的东西

ULONG FF=1234;
*DD=FF; //赋给D了
不对吗

TO WORSTBOYZYM
可能是因为 是应为 我输出是 %x 十六进制 驱动中的代码 而你们直接cout 吧 我搞不清 呵呵
pathuang68 2011-07-28
  • 打赏
  • 举报
回复
楼主你想干什么?
记住不要随便给指针赋值。

从你11楼给出的代码来看,你还没有弄清*和&,比如:

ULONG *AA;
...
//再次输出来看看
Kdprint(("地址是: %x",*AA)); // *AA是地址码?!


楼主还是先从最基本学起吧。这么基本的东西必须要搞得比较透彻才行,否则后面没有办法继续。

话说的直了点,希望不要介意。
WORSTBOYZYM 2011-07-28
  • 打赏
  • 举报
回复
int main()
{
int BB=1234;
int *AA=&BB;
printf("%d\n",*AA); //此打印出的数字是对的1234
BB=(*AA)+1; //为什么这样打印就不对了 打印出别的数字我想打印1235
cout<<BB<<endl;
}

我用vs2008编译出来,BB输出的就是1235..
dengchaozhu 2011-07-28
  • 打赏
  • 举报
回复
void Func1()
{
ULONG *AA;
ULONG *BB;
Func2(&AA);
//再次输出来看看
Kdprint(("地址是: %x",*AA));
//输出的仍然是f4a5w 这是对的 证明Func2的变量D没被回收
ULONG W;
W=*AA; //试验一下输出W就不对了 不是f4a5w了 更别说我想得到*AA+1了



}
void Func2(ULONG **AA)
{
ULONG *CC;
ULONG D;
CC=&D ;
Func3(CC);
*AA=CC;

}
void Func3(ULONG *CC)
{
.....
.....执行一些语句


KdPrint(("地址是 %x",Base)); //输出了f4a5w
*CC=(ULONG)Base; //Base是个地址 //等于给Func中的D赋了值

}
dengchaozhu 2011-07-28
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 babilife 的回复:]
木有问题
请看

C/C++ code


int main()
{
int BB=1234;
int *AA=&BB;
printf("%d\n",*AA); //此打印出的数字是对的1234
BB=(*AA)+1; //为什么这样打印就不对了 打印出别的数字我想打印1235
cout<<BB<<endl;
}
[/Quote]
错了 昨晚试了一晚 第一次就试着你这方法 是不对的
Xomic 2011-07-28
  • 打赏
  • 举报
回复
BB=(*AA)+1; 把一个ulong的值付给ulong的指针?


对嘛?我表示...

dengchaozhu 2011-07-28
  • 打赏
  • 举报
回复
好吧 此贴又不在版块上出现 顶下看
至善者善之敌 2011-07-28
  • 打赏
  • 举报
回复
木有问题
请看

int main()
{
int BB=1234;
int *AA=&BB;
printf("%d\n",*AA); //此打印出的数字是对的1234
BB=(*AA)+1; //为什么这样打印就不对了 打印出别的数字我想打印1235
cout<<BB<<endl;
}
加载更多回复(3)

64,648

社区成员

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

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