qq_41870875 2021-05-08 18:59 采纳率: 76.9%
浏览 52
已采纳

请教下c语言 指针赋值 的问题

初学者 今天被指针搞晕了, 求大神解答下疑问

 第一个疑问 :指针 指向和赋值  规范的正确操作方式是什么
目前我对指针的理解程度  指针大小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)

 

 

 

  • 写回答

4条回答 默认 最新

  • 正在学C++ 2021-05-08 20:43
    关注
    #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;
    }
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

悬赏问题

  • ¥15 stm32代码移植没反应
  • ¥15 matlab基于pde算法图像修复,为什么只能对示例图像有效
  • ¥100 连续两帧图像高速减法
  • ¥15 组策略中的计算机配置策略无法下发
  • ¥15 如何绘制动力学系统的相图
  • ¥15 对接wps接口实现获取元数据
  • ¥20 给自己本科IT专业毕业的妹m找个实习工作
  • ¥15 用友U8:向一个无法连接的网络尝试了一个套接字操作,如何解决?
  • ¥30 我的代码按理说完成了模型的搭建、训练、验证测试等工作(标签-网络|关键词-变化检测)
  • ¥50 mac mini外接显示器 画质字体模糊