初学者 今天被指针搞晕了, 求大神解答下疑问
第一个疑问 :指针 指向和赋值 规范的正确操作方式是什么
目前我对指针的理解程度 指针大小8 但指向的内存区域可以操作
*p=a; 这是指针指向a的内存
p=&a; 这是把a的值赋给p 8 大小的内存上
第二个问题: 有个需求,需要把double的值赋给 *void 指针或者指向 之后打印要能正常显示
我的操作 如下 均不正常 ,这也是把我彻底搞晕了
double d=97.01;
double *dd;
dd=&d;
//*dd =d; *dd=&d; 报错
void *v1,*v2,*v3,*v4,*v5;
//void *v1=(double *)88.43;
//报错:error: cannot convert to a pointer type
//均报错的操作 v1=(double *)d; v1=(void *)d; v1=d; *v1=d; *v1=dd; *v1=*dd; v1=(void *)dd;
v2=&d;
v3=dd;
v4=ⅆ
// 有个奇怪现象 如果最先 打印printf("---double dd %lf %lf\n",d,*dd); 这条 下面的 第一种操作 可以正常打印 但注释这条后 下面的均输出0.000
printf("%lf , %lf , %lf \n",v2,v3,v4);
//输出 0.000000 , 0.000000 , 0.000000
printf("%lf %lf \n",v2,(double *)(v2));
//输出 0.000000 0.000000
//打印均报错的操作 *v2 和 (double *)(*v2) 和(double *)(v2) 和(double )(*v2)
printf("%lf %lf \n",v3,(double *)(v3));
//输出:0.000000 0.000000
printf("%lf %lf \n",v4,(double *)(v4));
//输出0.000000 0.000000
// v5 分配 void 和double 同样均 输出0.000000
v5=(double *) malloc (sizeof(double)*2);
v5 =&d;
printf("v5: %lf %lf\n",v5,(double *)v5);
//输出:v5: 0.000000 0.000000
//均报错的操作 *v5 和 (double *)(*v5) 和(double *)(v5) 和(double )(*v5)
#include <stdio.h>
#include <stdlib.h>
int main(){
double d=97.01;
double *dd;
dd=&d;
*dd = d; //正确
//*dd = &d; //错误 dd是指针,*dd表示dd指向的数
void *v1,*v2,*v3,*v4,*v5;
//*v1=(double *)88.43; //肯定错误啊,首先你错在把一个double数强制类型转成一个double指针,又错在把一个doubel指针赋值给void指针
v1 = malloc(sizeof(double)); //为这个void型指针申请一块可以容纳double的空间
dd = (double*)v1; //正确 可以把void指针强制转成double指针 但是dd指向的数就变了
*dd = 10.01;
//v1 = (void*)dd; //错误 不要把其他类型的指针转成void指针
//v2=&d; //错误 &表示你取到double的地址,(&d)表示double指针也就是double地址,不能赋值给void指针
//v3=dd; //错误 不能把double类型变量赋值给void指针
printf("---double dd %lf %lf\n",d,*dd);//肯定正确啊,d就是一个double变量,dd是一个double指针,*dd表示取dd指向的数
//printf("%lf , %lf , %lf \n",v2,v3,v4); //当然错误了,怎么可以把一个void指针这样%lf输出呢?
//printf("%lf %lf \n",v3,(double *)(v3)); //首先不能输出void指针,其次,不能%lf输出double指针
//v5=(double *) malloc (sizeof(double)*2); //你为什么要给一个void指针赋值一个double指针呢?
double *v6 = (double *)malloc(sizeof(double)); //你可以这样做
*v6 = 1.1;
printf("%f\n",*v6);
//你不要和void指针过不去,几乎没人用void指针,你可以尝试其他类型的指针,int型指针,double型指针
// 指针你可以理解为地址,存放的是一个地址,这个地址就是某个数据的地址。*地址就可以取出指向的变量的值 *叫做解引用符
// &可以称为取地址符 对一个变量取地址就可以赋值给一个对应数据类型的指针
// 数据类型一定要相同才可以赋值
return 0;
}
printf("%lf \n",*(double *)(v2)); 可以正常打印
还有一个疑问 , int a=(int *)33; 这样可以 换到double 就报错呢?
希望对你有帮助:https://blog.csdn.net/it_xiangqiang/category_10581430.html
希望对你有帮助:https://blog.csdn.net/it_xiangqiang/category_10768339.html