黑马程序员技术交流社区

标题: 通过指针的输出 [打印本页]

作者: 路默”    时间: 2014-3-29 18:04
标题: 通过指针的输出
本帖最后由 路默” 于 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);
(错误)  求指向分析!!!

作者: FlyTrem    时间: 2014-3-29 19:16
本帖最后由 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是等价的。

作者: 氯化钾    时间: 2014-3-29 19:17
本帖最后由 氯化钾 于 2014-3-29 20:08 编辑

请看猴哥的正解
作者: 氯化钾    时间: 2014-3-29 19:21
FlyTrem 发表于 2014-3-29 19:16
int a=3;
int *p1=&a;
char *p2;

朋友, 如果你敲入编译器的话 你会发现你说的那句话能打印出3的 报错是最后一句话的
作者: 脸皮猴    时间: 2014-3-29 19:57
  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型数据。
作者: 路默”    时间: 2014-3-29 21:17
脸皮猴 发表于 2014-3-29 19:57
void型指针,表示这个指针指向的内存中的数据的类型要由用户来指定。比如内存分配函数malloc函数返回的指 ...

我验证了  就是最后一句的问题,是void 类型的指针问题,需要指针类型的一个强制转换来实现输出么?谢谢兄弟
作者: 路默”    时间: 2014-3-29 21:18
FlyTrem 发表于 2014-3-29 19:16
int a=3;
int *p1=&a;
char *p2;

这里没错,是最后一句的问题




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2