职业IT人-IT人生活圈

 找回密码
 成为会员
搜索
查看: 894|回复: 6

c语言指针问题

[复制链接]
popo 发表于 2009-8-28 10:16 | 显示全部楼层 |阅读模式
void printDestination1(int x,int y,int **win,int **pw)
{
*win=*pw=qw=(int* )malloc(sizeof(int));
}
void main()
{
printDestination1(6+4,2+10,&win,&pw);
}
先不看函数有没有意义
做主函数时
调用函数printDestination1
就是代入即
x=6+4y=2+10 **win=&win
**pw=&pw
则问题是调用函数中的*win=什么呢
本人对指针理解的不是很好
希望能讲的易懂点
问题补充:
高手们能帮我看下推箱子游戏的那段 里面的printDestination1画目的地的是什么意思什么作用吗谢谢啦 非常
强劲力量 发表于 2009-8-28 10:16 | 显示全部楼层

c语言指针问题

你那个win和pw是怎么定义的?是定义为int *win和int *pw就没错
**win表示取得指针win的地址 **pw同上在函数printDestination1中*win表示的就是指针win 只是如果直接过win传递过来的话无法改变win指向的内存 只有通过指针的调用才能改变主函数的值这个你知道的吧 malloc是开辟一个int 大小的无名内存 *win它指向这个无名int型内存pw同上
文仔 发表于 2009-8-28 10:16 | 显示全部楼层

c语言指针问题

win是二级指针啊
*win当然是对应一级指针了
沙包 发表于 2009-8-28 10:16 | 显示全部楼层

c语言指针问题

楼主**win=&win*win=??的说法不对
应该是int **win=&win,**win != &win
main函数中win要声明成int *win;


补充的回答:
printDestination1中的win是main中的&a传入的
但是是传值而不是传址
即win的值与&a的值相同
但win是有地址的(是个左值)而&a无地址(不是左值)
printDestination1中*win则是*(&a)即a,所以对*win赋值即改变了main中a的值
(这与一般情况不同
一般被调用函数中的参数改变不会使调用者的局部变量改变因为函数调用是传值的
局部变量与参数地址不同
本例中
改变了*win即改变了a,因为*win的地址win与a的地址&a相同
这有点模仿传址调用的意味)
培记 发表于 2009-8-28 10:17 | 显示全部楼层

c语言指针问题

传值的时候是win=&win

你形参和实参一样
我把printDestination1里的win叫b
main里的win叫a

二级指针b指向a的地址
也就是说*b=a里的值
a的值是一个int的地址

也就是b->a->int;

这个函数是为了给a分配空间的
因为参数传递是做一个指针的copy
为了给指针赋值
必须用二级指针

原则上
函数传参数
n级指针可以给n-1级指针赋值
山人2000 发表于 2009-8-28 10:17 | 显示全部楼层

c语言指针问题

呵呵
调用函数后有
**win=win;
这点别弄错
osp 发表于 2009-8-28 10:17 | 显示全部楼层

c语言指针问题

**win是二级指针就是说取*win的地址
您需要登录后才可以回帖 登录 | 成为会员

本版积分规则

QQ|手机版|小黑屋|网站帮助|职业IT人-IT人生活圈 ( 粤ICP备12053935号-1 )|网站地图
本站文章版权归原发布者及原出处所有。内容为作者个人观点,并不代表本站赞同其观点和对其真实性负责,本站只提供参考并不构成任何投资及应用建议。本站是信息平台,网站上部分文章为转载,并不用于任何商业目的,我们已经尽可能的对作者和来源进行了通告,但是能力有限或疏忽造成漏登,请及时联系我们,我们将根据著作权人的要求立即更正或者删除有关内容。

GMT+8, 2024-4-25 03:48 , Processed in 0.147250 second(s), 20 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表