C语言指针问题
用指针交换两个数:哪里不对?
#include<stdio.h>
int main()
{ int *p1,*p2,iTemp;
scanf("%d,%d",p1,p2);
iTemp=*p1;
*p1=*p2;
*p2=iTemp;
printf("%d %d",p1,p2);
return 0;
}
追问:运行不对哎。。。
追问:运行不对哎。。。
答案:不明白你要表达的意思,用指针交换两个数的方法是需要调用函数来验证的。#include <stdio.h>
void change(int *p1,int *p2)
{int temp=p1;
p1=p2;
p2=temp;
}
void main()
{int p1,p2;
scanf("%d%d",&p1,&p2);
change(&p1,&p2); //关键的一步,调用函数传递的是p1,p2的地址。这样才能改变p1,p2的值。
printf("%d%d",p1,p2);
getch();
我就我了解的说一下。但是未必是最终正确的答案,所以仅供你去参考而不是让你去记住。
}
首先我给你分析下你的代码:
#include<stdio.h>
int main()//这之前的就不说了。不可能有什么错误的。
{ int *p1,*p2,iTemp;//我们都知道,int型定义的东西都是随机的 分配一个数的。
scanf("%d,%d",p1,p2); //由于你的这里的俩个指针变量没有给其指定具体的地址所以此时其实你的指针应该叫做野指针,所以应该i是没办法直接使用的,因为那个野的指针未必就能指定一个真实存在的地址所以这里应该加点东西
iTemp=*p1;//这里应该没有偶错
*p1=*p2;//这里应该没有偶错
*p2=iTemp;//这里应该没有偶错
printf("%d %d",p1,p2);//这里,由于你的p1,p2设置的为指针变量,所以在p1,p2中存放的应该是易做图作数的指针而不是变量本身。这里应该用带*的。
return 0;////这里应该没有偶错 而且还挺规范的感觉,我经常不写返回的。我要向你学习
}
下面是我给你修改过的代码:有点粗糙
#include<stdio.h>
int main()
{ int *p1,*p2,iTemp;
scanf("%d,%d",p1,p2);
iTemp=*p1;
*p1=*p2;
*p2=iTemp;
printf("%d %d",*p1,*p2);
return 0;
}
好了就这样吧。虽然我不太清楚我的理解是否正确,但是我的代码是可以运行的。
scanf("%d,%d",p1,p2);
指针变量本身也占用一块内存空间,你这是存入指针变量空间,而不是指针指向的内存地址输出的时候用*p1和*p2 试试 或者 输入 时候加 地址不过好像就是前面~~因为 前面的p1 p2就是 地址你试试 改下前面的那个输出~~
你定义了指针p1,p2,但是这p1,p2还没有存放地址,你叫p1,p2指向谁啊