鱼C论坛

 找回密码
 立即注册
查看: 3157|回复: 6

关于指针的问题

[复制链接]
发表于 2011-7-26 13:43:35 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
#include"stdio.h"
void downf(int *m,int *n)
{
int j;
j=*m;*m=*n;*n=j;
}
main()
{int a=10,b=20,*p,*q;
p=&a,q=&b;
printf("%d %d %x %x\n",*p,*q,p,q);
if(a<b)
downf(&p,&q);
printf("%d %d %x %x",*p,*q,p,q);
getch();
}
该程序运行结果,为什么p,q的地址也会交换,子函数不是只交换了值吗?
然后下面的程序为什么是错误的?难道子函数中交换好的地址  又变回去了?
#include"stdio.h"
void downf(int *m,int *n)
{
int *j;
j=m;m=n;n=j;
}
main()
{int a=10,b=20,*p,*q;
p=&a,q=&b;
printf("%d %d %x %x\n",*p,*q,p,q);
if(a<b)
downf(&p,&q);
printf("%d %d %x %x",*p,*q,p,q);
getch();
}
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2011-7-26 15:30:39 | 显示全部楼层
本帖最后由 0FFFFH 于 2011-7-26 15:36 编辑

我感觉你这两段代码都有问题,实参和形参不匹配。把downf(&p,&q); 改成 downf(p,q);试试
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2011-7-26 23:20:26 | 显示全部楼层
接上
(1):运行结果 地址没有改变
(2): 你改的 是m n 的地址  调用函数返回 后  m n 都消失了 所以 P q 不会改变
要改变 就要用指针指向P Q    就是指针的指针
想想以前你所学的非指针变量  你传过去两个值交换下  为什么返回函数后 他们俩值还是以前
因为他们是同一级别的  你要改变啥 就得指向啥

第二个程序你想改变 p q   对吧

就形参声明指向P Q的指针


程序二给你修改成这样

#include"stdio.h"
void downf(int **m,int **n)
{
int *j;
j=*m;*m=*n;*n=j;
}
main()
{int a=10,b=20,*p,*q;
p=&a,q=&b;
printf("%d %d %x %x\n",*p,*q,p,q);

downf(&p,&q);
printf("%d %d %x %x",*p,*q,p,q);

}
小甲鱼最新课程 -> https://ilovefishc.com
 楼主| 发表于 2011-7-27 09:12:53 | 显示全部楼层
:dizzy:确实我混在一起了,多谢指点
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2011-7-29 17:10:37 | 显示全部楼层
哎  孩子知道就行!指针用不着再取地址了
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2011-8-1 15:37:19 | 显示全部楼层
int *j有问题,j里面只能存储变量的地址,也就是&p这种形式,如果是存储是指针,那需要声明为int **j
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2011-8-2 10:09:41 | 显示全部楼层
楼主对指针没有搞清楚,尤其对传值指针方面的问题
我给你讲解一下吧:
指针定义:指针就是地址,地址就是指针,指针变量就是存放内存单元编号的变量,或者说指针变量就是存放地址的变量。
地址定义:内存单元的编号,从零开始的非负整数 范围一般是4G

如何通过被调函数修改主调函数的普通变量的值?就是你这个程序的核心含义
注意三点: 1 ,实参必须为该普通变量的地址
                2,形参必须为指针变量
                3, 在被调函数中通过,*形参名  的方式就可以修改主调函数的相关变量值

随意给一个代码:
void (int * p, int *q)
{
     int temp;
     temp = *p;
     *p = *q;
    *q = temp;
}

int main()
{
   
   int a = 5;
   int b = 3;
  f(&a, & b);
  printf("");//输出后结果就会交换了{:1_1:}

   return 0;
}
小甲鱼最新课程 -> https://ilovefishc.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-11-7 06:26

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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