C语言指针问题!

JutanChan 2007-12-10 05:26:31

//程序1
#include <stdio.h>
void swap(int *p1,int *p2)
{
int p;
p=*p1;
*p1=*p2;
*p2=p;
printf("\n Swap:%d,%d",*p1,*p2);
}
void main()
{
int a,b;
int *pa,*pb;
printf("Input two number:");
scanf("%d%d",&a,&b);
*pa=a;
*pb=b;
if(a<b)
swap(pa,pb);
printf("\n Swap:%d,%d",a,b);
getch();
}



//程序2
#include <stdio.h>
void swap(int *p1,int *p2)
{
int p;
p=*p1;
*p1=*p2;
*p2=p;
printf("\n Swap:%d,%d",*p1,*p2);
}
void main()
{
int a,b;
int *pa,*pb;
printf("Input two number:");
scanf("%d%d",&a,&b);
pa=&a;
pb=&b;
if(a<b)
swap(pa,pb);
printf("\n Swap:%d,%d",a,b);
getch();
}


上面两个程序中只有一个不同的地方
就是程序1中的
*pa=a;
*pb=b;
程序2中换成了
pa=&a;
pb=&b;
那程序的差异出现在哪里呢?
*pa=a---->pa=&a等价的吗?
...全文
65 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
blackboycpp 2007-12-10
  • 打赏
  • 举报
回复
程序1中*pa,*pb是一个不确定的值,pa,pb有可能指向系统不允许访问的内存位置
在这种情况下, 随便赋值就出错了.
ckt 2007-12-10
  • 打赏
  • 举报
回复
可以找点再指针的资料看下,
加深对指针的理解
ckt 2007-12-10
  • 打赏
  • 举报
回复
*pa=a; // pa都没有指向有效的地址,就往里面写数据?
believefym 2007-12-10
  • 打赏
  • 举报
回复
程序编译是没有问题,那个属于运行时异常,编译器不可能知道的
believefym 2007-12-10
  • 打赏
  • 举报
回复
程序1有问题,非法访问内存啊
pa、pb指针没有初始化,也就是指向哪里是随即的(看内存里是什么值了),然后你给它赋值*pa=a,会出错的
NKLoveRene 2007-12-10
  • 打赏
  • 举报
回复
1的写法相当于把指针指向的地方的值变成a和b了
而这个指针还没有初始化呢。。。
JutanChan 2007-12-10
  • 打赏
  • 举报
回复
1楼的专业点好不好····
我知道因为pa没有指向而直接把*p=a;是不提倡的
但是程序为何没有报错
只是远行结果上的差异··
NKLoveRene 2007-12-10
  • 打赏
  • 举报
回复
没有程序1这种写法。。。

69,373

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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