A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 路默” 中级黑马   /  2014-3-29 18:04  /  1365 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 路默” 于 2014-3-29 23:09 编辑

int a=3;
int *p1=&a;
char *p2;
void *p3;
p3=(void*)p1;
p2=(char*)p3;
printf("%d",*p1);
p3=&a;
printf("%d",*p3);
(错误)  求指向分析!!!

评分

参与人数 1技术分 +1 收起 理由
jing迪 + 1

查看全部评分

6 个回复

倒序浏览
本帖最后由 FlyTrem 于 2014-3-29 19:20 编辑

int a=3;
int *p1=&a;
char *p2;
void *p3;
p3=(void*)p1;
p2=(char*)p3;
printf("%d",*p1);
p3=&a;
printf("%d",*p3);
错误在这printf("%d",*p1);,应该为printf("%d",p1); *p表示的是输出地址。
而*p是和&a是等价的。

评分

参与人数 1技术分 +1 收起 理由
jing迪 + 1

查看全部评分

回复 使用道具 举报
本帖最后由 氯化钾 于 2014-3-29 20:08 编辑

请看猴哥的正解
回复 使用道具 举报
FlyTrem 发表于 2014-3-29 19:16
int a=3;
int *p1=&a;
char *p2;

朋友, 如果你敲入编译器的话 你会发现你说的那句话能打印出3的 报错是最后一句话的
回复 使用道具 举报
  1.         int a=3;
  2.         int *p1=&a;
  3.         char *p2;
  4.         void *p3;
  5.         p3=(void*)p1;
  6.         p2=(char*)p3;
  7.         printf("%d",*p1);
  8.         p3=&a;
  9.         printf("%d",*p3); // 这句有问题,因为你的p3指针式void型的,这个类型是一个未知的类型,需要用户指定才行,
  10.         //所以,这p3需要强制转换一下就OK了
  11.         //printf("%d",*(int *)p3); 这么改就OK了
  12.         //随便你要知道void类型指针!
复制代码


void型指针,表示这个指针指向的内存中的数据的类型要由用户来指定。比如内存分配函数malloc函数返回的指针就是void *型,用户在使用这个指针的时候,要进行强制类型转换,也就是显式说明该指针指向的内存中是存放的什么类型的数据(int *)malloc(1024)表示强制规定malloc返回的void*指针指向的内存中存放的是一个个的int型数据。

评分

参与人数 1技术分 +1 收起 理由
jing迪 + 1

查看全部评分

回复 使用道具 举报 1 0
脸皮猴 发表于 2014-3-29 19:57
void型指针,表示这个指针指向的内存中的数据的类型要由用户来指定。比如内存分配函数malloc函数返回的指 ...

我验证了  就是最后一句的问题,是void 类型的指针问题,需要指针类型的一个强制转换来实现输出么?谢谢兄弟
回复 使用道具 举报
FlyTrem 发表于 2014-3-29 19:16
int a=3;
int *p1=&a;
char *p2;

这里没错,是最后一句的问题
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马