C语言指针,这两种写法为什么错

[复制链接]
查看11 | 回复4 | 2009-7-30 17:28:55 | 显示全部楼层 |阅读模式
同意楼上的,很详细,怎么说了,C++书都写了,注重指针的C书不可能没有,认真耐心看完书吧
回复

使用道具 举报

千问 | 2009-7-30 17:28:55 | 显示全部楼层
第二种你可以改为swap(int &pt1,int &pt2){int temp; temp=pt1; pt1=pt2; pt2=temp;}
回复

使用道具 举报

千问 | 2009-7-30 17:28:55 | 显示全部楼层
第二种是对指针进行的操作。把指针看成变量的话,无论子函数对指针如何改变,主函数里指针所指向的地址都不会改变。而第一种则是对指针所指向地址的内容进行改变,这个是永久的。这需要说明的是,当对非指针类型的变量进行操作的时候,实际的操作区域是在RAM中,是将a这个值复制到RAM中。而对指针变量进行操作是,如*p,是将p的地址0x1000,复制到RAM中,但是当对p所指内容进行操作时,就不是在RAM中了,而是在0x1000那边了。当子函数退出之后RAM区清空,a当然不会改变,但是*p所指的内容就会有改变了。不知我有没说清楚,如果还不明白请发站内信
回复

使用道具 举报

千问 | 2009-7-30 17:28:55 | 显示全部楼层
swap(int *pt1,int *pt2){int *temp; temp=pt1; pt1=pt2; pt2=temp;}因为第二种的指针temp没有初始化是不对的. 也就像楼上说的,它们只改地址的位置,不改变内容.可是,像我上面说的.最后没有初始化temp也是种错误.
回复

使用道具 举报

千问 | 2009-7-30 17:28:55 | 显示全部楼层
直接用引用还好点第二中写法void swap(int *pt1, int *pt2){
int *temp;
temp = pt1;
pt1 = pt2;
pt2 = temp;}只是改变了pt1 pt2两个指针所指的位置,没有改变他们所指的内容。在调用swap(q1, q2)这个函数时,首先做的是复制参数,可以理解为pt1 = q1; pt2 = q2; 这样 无论怎么改变pt1 pt2他们指针的位置 也不会影响到q1 q2。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行