分文未发放 发表于 2020-4-5 10:25:51

void指针和NULL指针

#include"stdio.h"
main()
{
      int num=1024,*pi=#
      char *ps="FishC";
      void *pv;
      
      pv=pi;
      printf("pi:%p,pv:%p\n",pi,pv);
      printf("pv:%d\n",*(int *)pv);
      
      ps=(char *)pv;
      pv=ps;
      printf("ps:%p,pv:%p\n",ps,pv);
      printf("pv=%s\n",(char *)pv);
}

小甲鱼视频里面这个pv指向的字符串输出不了是为什么

墨羽岚 发表于 2020-4-5 17:34:36

你第四行*pi=#这里是咋想的

大马强 发表于 2020-4-5 17:45:39

本帖最后由 大马强 于 2020-4-5 17:46 编辑

#include"stdio.h"   //不应该是<stdio.h>
main()                  //漏了 int
{
      int num=1024,*pi=#      //*pi?
      char *ps="FishC";
      void *pv;      //void?你应该是想写char吧
      
      pv=pi;
      printf("pi:%p,pv:%p\n",pi,pv);
      printf("pv:%d\n",*(int *)pv);
      
      ps=(char *)pv;
      pv=ps;
      printf("ps:%p,pv:%p\n",ps,pv);
      printf("pv=%s\n",(char *)pv);

        //漏写return 0;
}

看看改后可以不

分文未发放 发表于 2020-4-5 19:12:42

墨羽岚 发表于 2020-4-5 17:34
你第四行*pi=#这里是咋想的

这个地方打错了是 *pi=&num;

分文未发放 发表于 2020-4-5 19:14:12

大马强 发表于 2020-4-5 17:45
#include"stdio.h"   //不应该是
main()                  //漏了 int
{


这是甲鱼视频里讲的一个,最后一个printf不能输出。然后他在视频里没说为什么

h5681901 发表于 2021-2-10 20:45:34

萌新大胆猜测:{:10_266:}大概是因为整型用字符型输出不了?

李京 发表于 2021-2-10 21:08:39

本帖最后由 李京 于 2021-2-10 21:19 编辑


#include"stdio.h"
main()
{
      int num=0x005678,*pi=&num;
      char *ps="FishC";
      void *pv;
      
      pv=pi;
      printf("pi:%p,pv:%p\n",pi,pv);
      printf("pv:%d\n",*(int *)pv);
      
      ps=(char *)pv;
      pv=ps;
      printf("ps:%p,pv:%p\n",ps,pv);
      printf("pv=%s\n",(char *)pv);//这里会打印xV
}
      ps=(char *)pv;
}
这里pv原本是int类型的,你强制变成了char类型跨度不一样了 num的值原本是用4个字节存放的,想在变成了1个字节,数值就不一样了,改变num的值,打印的也不一样
在dev-c++上实验了,你如果把num的值变成0x005678就打印xVx的ASCII码是1200x78变成10进制就是120

李京 发表于 2021-2-10 21:09:53

李京 发表于 2021-2-10 21:08
这里pv原本是int类型的,你强制变成了char类型跨度不一样了 num的值原本是用4个字节存放的,想在变成了 ...

具体怎么存放,可以看一下这一篇
小端和大端(有彩蛋)
https://fishc.com.cn/thread-75394-1-1.html
(出处: 鱼C论坛)
页: [1]
查看完整版本: void指针和NULL指针