C语言指针问题 求助

为什么编译都没问题 运行不了
#include<stdio.h>
void exchange(float a,float b)
{
float *p,*q;
int c;
p=&a;
q=&b;
p=c;p=q;q=c;
a=*p;b=*q;
}
int main()
{
float x,y;
printf("请分别输入两个数\n");
scanf("%f,%f",&x,&y);
exchange(x,y);
printf("%f,%f",x,y);
return 0;
}

什么叫运行不了,请你把你的问题描述清楚好吧,你可能在输入的地方出现问题,你的scanf()里面有个逗号,输入的时候让你有些郁闷,请你只让一个scanf()输入一个数字行不,这样就不会出多余的问题,
再就是你的子函数里的问题,你这里没有交换x, y的值,因为你的函数写的就是没有交换值,所以你的输入里的x, y 值写输入的值相同
温馨提示:内容为网友见解,仅供参考
第1个回答  2011-05-26
你是运行不出正确结果吧 exchange()函数写得就不对,你定义的变量c是交换a、b的中间量,p=c;p=q;q=c;这样把a的地址已经覆盖掉了,必然实现不了你想要的结果了。
第2个回答  2011-05-26
int swap(int* m,int* n)
{
int tmp;
tmp=*m;
*m=*n;
return 0;
}
这样才对,交换值要传地址,你那个是交换参数的值,而参数是复制过来的,并不是原来的数追问

#include
int swap(int* m,int* n)
{
int tmp;
tmp=*m;
*m=*n;
return 0;
}
int main()
{
float x,y;
printf("请分别输入两个数\n");
scanf("%f,%f",&x,&y);
exchange(x,y);
printf("%f,%f",x,y);
return 0;
}
运行不了

追答

sorry,swap少些一句==||||||

第3个回答  2011-05-26
#include<stdio.h>
void exchange(float &a,float &b)
{
float c;
c=a;
a=b;
b=c;
}
int main()
{
float x,y;
printf("请分别输入两个数\n");
scanf("%f%f",&x,&y);
exchange(x,y);
printf("%f,%f",x,y);
return 0;
}追问

我要用指针

追答

#include
void exchange(float *a,float *b)
{
float c;
c=*a;
*a=*b;
*b=c;
}
int main()
{
float x,y;
printf("请分别输入两个数\n");
scanf("%f%f",&x,&y);
exchange(&x,&y);
printf("%f,%f",x,y);
return 0;
}

本回答被提问者采纳
第4个回答  2011-05-26
c语言是不支持引用的,因此要交换值的话,可以这么做:
void exchange(float *a,float *b)
{
float tmp;

tmp = *a;
*a = *b;
*b = tmp;
}
int main()
{
float x,y;
printf("请分别输入两个数\n");
scanf("%f,%f",&x,&y);
exchange(&x, &y);
printf("%f,%f",x,y);
return 0;
}追问

程序 没法交换值

追答

好了,你再运行一遍,你得看编译器怎么报错的,全角字符是不支持的,也就是说写代码的时候不要开输入法
#include
void exchange(float *a,float *b)
{
float tmp;

tmp = *a;
*a = *b;
*b = tmp;
}
int main()
{
float x,y;
printf("请分别输入两个数\n");
scanf("%f %f",&x,&y);
exchange(&x, &y);
printf("%f,%f",x,y);
return 0;
}

C语言求助指针的移动问题
这几个运算符中,=叫赋值运算符,它的优先级最低,而++的优先级最高,*次之。其实运算结果也不是“先赋值”,是先进行*操作从p指向的地址中取出值来才赋给S的,最后才对p增1。之所以优先级最高的++在最后进行,是由它自身的功能决定的:它写在变量后面,叫后增1运算符。后增1运算符要在它所...

c语言 指针问题 有点看不懂 能帮忙解答一下正确答案中的 每一步运算...
然后定义了一个指针变量 int *p=&t ,指针p指向结构体变量t,要调用结构体中的成员变量,有三种方法;t.成员名(如 t.num)(*p).成员名(如(*p).num)p->成员名(如 p->num)答案为B

c语言指针问题,求解答
A、D定义为:A 定义指向函数的指针pf,所指向的函数参数为空,无返回值 D 定义指向函数的指针pf,函数参数为int,char型(不符题意,题目为int,char*),无返回值 B、D的定义为:定义函数pf,函数参数为空,返回类型为void *(void 型指针)单从函数指针的定义可排除BCD。其次,指针赋值 函数名与...

问两道有关c语言字符指针的问题,请将程序每一步的意思告诉我,谢谢啦...
第一题答案:B。理由:*s与*t都是取出此时地址存储的值,while()语句里面的意思是,当指针s与t都不为空并且s指向的值等于t指向的值。。。当s或者t为空或者t与s指向的值不同时,while()结束,返回此时s指向的值减去t指向的值,所以为比较两个字符串的大小;第二题答案:A。理由:x的地址赋值...

C语言指针问题。
这是一个运算顺序的问题。注意括号的运用。(1) ++(*pointer)是先取值,再自增,当前pointer指向的是位置arr[3],取值后是2,*pointer的结果是2,2再自增,当然会得出3。值得说明的是,这个括号是可以省略的,此处括号只起到增加程序可读性的作用。(2)*(pointer-2)是先移动指针,再取值。

C语言 关于指针的选择 求教高手
①答案是为B ②*p1=*p2;的意思:【p1指向的地址的内存块的值为p2地址指向内存块上的值】③p1=p2;的意思:【p1指向的地址为p2指向的地址】④为了加深你对指针的理解,我们可以这么认为:p1是一张纸条,上面写着房间号,p2也是。p1=p2;是把p1纸条上的房间号擦掉,改成p2纸条上的房间号。p1=*p2...

C语言指针问题
一、如有定义char y[4]= "321"则表达式 *y+2的值是'5' 。分析:y是字符串数组首元素'3'的地址,*y的值就是字符'3',再加上2,就是字符'5'(也可以说是字符'5'的ASC码值)。二、 如有定义char z[2][4]={"MAT", "LAB"};,则表达式*(*z+2)的值是 'T'。分析:z是二维字符...

C语言指针问题
int *p;这里,定义的是一个指向int变量的指针。它同时也可以用来指向一个int数组。因为在C中,数组的表示是通过元素的首地址来表示的。作为指针,它和int变量指针没区别,编译器无法区分。int (*p)[4],如果你的这里符合语义的话,应该有类似这样的一个声明:int p[3][4]int (*p)[4]其实指向的...

C语言的数组和指针问题,谢谢高手的解答!
总结,问题的关键在于,数组名相当于一个指向于这个数组第一个元素的指针。3)所以,int A[2][3][4]={0};A是一个三维数组,其中A[0]和A[1]都是它的元素,A[0]是第一个元素。所以, A是一个三级指针,指向了这个数组的第一个元素A[0],而A[0]是一3*4的二维数组。而A[0]是一个...

C语言指针问题
假如 P 是指针 那么 *p 就代表变量。 而&a是地址, *p=&a 就是把地址给变量,当然不正确了,因为地址只能给指针。p2,*p1都是变量,变量之间互相赋值是正确的。“原因是被赋值的指针变量前不能再加*说明符”这句话的意思是:如果 给 指针P加上“*”,那么它就变成 了变量,代表的意义...

相似回答