关于(void*)指针的问题
代码:
#include<stdio.h>
void get_xy(double *x_p,double *y_p)
{
printf("x_p..%p,y_p..%p\n",(void *)x_p,(void *)y_p);
printf("&x_p..%p,&y_p..%p\n",(void *)&x_p,(void *)&y_p);
*x_p=1.0;
*y_p=2.0;
}
int main(){
double x;
double y;
printf("&x..%p,&y..%p\n",(void *)&x,(void *)&y);
get_xy(&x,&y);
printf("x..%f,y..%f",x,y);
return 0;
}
#include<stdio.h>
void get_xy(double *x_p,double *y_p)
{
printf("x_p..%p,y_p..%p\n",*x_p,*y_p);
printf("&x_p..%p,&y_p..%p\n",&x_p,&y_p);
*x_p=1.0;
*y_p=2.0;
}
int main(){
double x;
double y;
printf("&x..%p,&y..%p\n",&x,&y);
get_xy(&x,&y);
printf("x..%f,y..%f",x,y);
return 0;
}
第一次输出
&x..0x16efb75d0,&y..0x16efb75c8
x_p..0x16efb75d0,y_p..0x16efb75c8
&x_p..0x16efb7588,&y_p..0x16efb7580
x..1.000000,y..2.000000
第二次输出
&x..0x16d1c35d0,&y..0x16d1c35c8 //这两行为什么不一样?
x_p..0x102c3fef0,y_p..0x1220800102fc6b74
&x_p..0x16d1c3588,&y_p..0x16d1c3580
x..1.000000,y..2.000000
##补充提问
加了(void*)是表现形式变了吗
(void*)是强制类型转换。 第二次输出不一样见注释,供参考:
#include<stdio.h>
void get_xy(double* x_p, double* y_p)
{
printf("x_p..%p,y_p..%p\n", x_p, y_p);
//printf("x_p..%p,y_p..%p\n",*x_p,*y_p); 这样输出已经解引用了,输出的是x y 的随机值
printf("&x_p..%p,&y_p..%p\n", &x_p, &y_p);
*x_p = 1.0;
*y_p = 2.0;
}
int main() {
double x;
double y;
printf("&x..%p,&y..%p\n", &x, &y);
get_xy(&x, &y);
printf("x..%f,y..%f", x, y);
return 0;
}