void cmp(int* a,int* b,int* c){
if(*a>*b){
if(*b>*c)
printf("%d %d %d\n",*a,*b,*c);//疑问的地方在这个语句中
else{
if(*a>*c){
printf("%d %d %d\n",*a,*c,*b);
}
else{
printf("%d %d %d\n",*c,*a,*b);
}
}
}
else{
if(*a>*c)
printf("%d %d %d\n",*b,*a,*c);
else{
if(*b>*c){
printf("%d %d %d\n",*b,*c,*a);
}
else{
printf("%d %d %d\n",*c,*b,*a);
}
}
}
}
int main(){
int a,b,c;
scanf("%d%d%d",&a,&b,&c);
int* p1=&a;
int* p2=&b;
int* p3=&c;
cmp(p1,p2,p3);
return 0;
}
c/c++中,*a是a的值所指向的地址中存储的值。
比如a = 200;
那么*a是200这个地址中所存储的值。
扩展一点,&a则是指a所在的地址的值,大概如下:
内存
地址 值
150 200 #a变量 所在的位置
200 300
那么对于上述内存地址及地址中存储的值来说,
a变量的值是200
&a是150 ,即a所在的地址的值
*a是300,即a变量值所指向的地址中存储的值
谢谢啊,a*是地址的值,确实是正确的,但是如果在cmp函数中换成a不就是地址了吗,为什么结果还是一样的,不是应该不对吗
这个应该是编译器的问题 编译器自动帮你优化了 我用的vs2013调试结果就不一样
是编译器的原因。从理论上来说,a与*a使用printf函数时输出的结果不同。因为在你调用的函数中,a是地址,*a是a这个指针所指向的值。printf函数输出时,a输出的是指针的地址,*a输出的是指针所指地址中元素的值。