指针变量用%c可以但是%d输出为什么不行?

#include<stdio.h>
int main()
{
	char a = 'a', c, z;
	char* p1 = &a;
	int* p2, * p4,*p5;
	void *p3;
	p3 =p1;
	int d = *(int*)p3, e;
	p2 = (int*)p3;
	e = *p2;
	c = *p2;
	p5 = (int*)p1;
	//z = *p3;
	p4 = &e;
	char b = *p2;
	printf("%d\n", *p1);

	printf("*p2=%c\n", *p2);
	printf("*p2=%d\n", *p2);

	printf("d=%c\n", d);
	printf("d=%d\n", d);

	printf("e=%c\n", e);
	printf("e=%d\n", e);

	printf("*p4=%c\n", *p4);
	printf("*p4=%d\n", *p4);

	printf("b=%c\n", b);
	printf("b=%d\n", b);

	printf("c=%c\n", c);
	printf("c=%d\n", c);


}

 

和编译器有关吧,我在vs2015里面就不行,在codeblock里面就是用%d的方式输出*p的ascii,感觉问题就出在强制转换指针类型出的问题。

上面vs2015的,下面codeblock的:

 

 

测了一下,发现 %d 输出的是地址,而不是将 *p 的值转为对应的 ascii 码。不过我也是第一次知道,具体原因不知道为啥,可能就是这么设计的吧。

您好,我是有问必答小助手,你的问题已经有小伙伴为您解答了问题,您看下是否解决了您的问题,可以追评进行沟通哦~

如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~

ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>>https://vip.csdn.net/askvip?utm_source=1146287632