地址与指针变量有何分别

地址与指针变量有何分别(请写出概念)

还有一点我还没有明白的是:

为什么有时候用*pa 有时候用pa

例如:

#include<stdio.h>

void main()

{float a, b, c, *pa=&a,*pb=&b, *pc= &c, max;

scanf("%f,%f,%f",pa,pb,pc);

if (pa>pb)

max =*pa;

else

max =*pb;

if (*pc>max)

max = *pc;

printf("max = %f\n", max);

}

对比

#include<stdio.h>

void main()

{int a, b, c, *pa = &a, *pb =&b, *pc = &c, *p;

scanf("%d,%d,%d",pa,pb,pc);

if (*pa>*pb)

p= pa, pa = pb, pb =p;

if (*pa>*pc)

p= pa, pa = pc, pc =p;

if (*pb>*pc)

p= pb, pb = pc, pc =p;

printf ("%d<=%d<=%d\n",pa,pb,pc);

}
前两个既答案真是好难选择啊....
我都唔知道比边个好了...这些分数...投票吧!!!!!!!!
请帮一下忙

地址:内存的每一个字节都有一个编号,这就是地址。
数组名可以代表数组的首地址,&+变量名可以表示取地址(当然也可以是引用的)……

指针:一个变量的地址称为该变量的指针。

~~~~~~~你的例子有点问题,给你修改了哈,来看例子
#include<stdio.h>

void main()

{float a, b, c, *pa=&a,
*pb=&b,
*pc= &c, /*指针pa,pb,pc分别指想2了a,b,c*/
max;

scanf("%f%f%f",pa,pb,pc); /*这里好象不要前两个逗号才对哦*/

if (*pa>*pb) /*这里是把指针pa和pb指向的数来做比较的*/

max =*pa; /*这句可以理解为“把pa指向的数赋给了max*/

else

max =*pb;

if (*pc>max) /*只要pa指向的数大于了max,就交换,这里是”数的交换“哦*/

max = *pc;

printf("max = %f\n", max);

}

~~~~~~~~~~~~~
结论:这个程序做的是指针指向的数的比较,得到的结果是一个最大数,因此要用到“指针所指的内容”的时候,就要采用格式*p

~~~~~~~~~~~~#include<stdio.h>

void main()

{int a, b, c, *pa = &a, *pb =&b, *pc = &c, *p;

scanf("%d,%d,%d",pa,pb,pc);

if (*pa>*pb) /*用指针所指的数来做比较,用格式*p*/

p= pa, pa = pb, pb =p; /*这里交换的不是数值,而是指针的地址,没有*号嘛*/

if (*pa>*pc)

p= pa, pa = pc, pc =p;

if (*pb>*pc)

p= pb, pb = pc, pc =p;

printf ("%d<=%d<=%d\n",pa,pb,pc); /*输出的还是是地址*/

}

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

结论:要用到指针的地址,就去掉*号,这个程序的运行结果就是3个地址

~~~~~~~~~~~~~~~~~~~~~~~~~~~~
温馨提示:答案为网友推荐,仅供参考
第1个回答  2007-10-11
地址:如果在程序定义了一个变量,在对程序进行编译时,系统就会给这个变量分配内存单元。根据变量类型进行分配一定的长度空间。内存区的每以一个字节都有一个编号,这就是地址,相当于旅馆的房间号。
指针变量:指向一个变量的变量,它的值是一个变量的地址。
你的两个程序都有点问题,帮你改了

*pa,*pb,*pc定义号后在后面都是表示其所指变量的数值,你也可以这样定义
float a, b, c, *pa,*pb, *pc, max;

pa=&a;
pb=&b;
pc= &c;

#include<stdio.h>

void main()

{float a, b, c, *pa=&a,*pb=&b, *pc= &c, max;

scanf("%f,%f,%f",pa,pb,pc);

if (*pa>*pb) //这里是数值的大小比较

max =*pa;

else

max =*pb;

if (*pc>max)

max = *pc;

printf("max = %f\n", max);

}

#include<stdio.h>

void main()

{int a, b, c, *pa = &a, *pb =&b, *pc = &c, *p;

scanf("%d,%d,%d",pa,pb,pc);

if (*pa>*pb)

p= pa, pa = pb, pb =p;

if (*pa>*pc)

p= pa, pa = pc, pc =p;

if (*pb>*pc)

p= pb, pb = pc, pc =p;

printf ("%d<=%d<=%d\n",*pa,*pb,*pc); //这里错了你的程序,要输出的是一个整形值,而不是一个地址

}
第2个回答  2007-10-11
你看清用*pa和pa的条件,
定义时是,例;int *pa;
赋值时:pa=&a;或*pa=a;
相似回答