关于void*指针的字符printf问题,求C语音高手解答!
发布网友
发布时间:2023-08-08 06:34
我来回答
共1个回答
热心网友
时间:2023-08-20 00:41
如果a中第一个都能打印正常,那你运气真好。
printf("%c",(char)(*(char*)m));不管你怎么转换,最终编译器都要转成char型(printf函数就是这样解析度,根据第一个参数格式化后面的参数),所以第一个的其他3个都没问题,但是第一个有问题,
因为你打印的是*m,m的值为0X41,所以打印地址0X41存放的值并强制转换char型输出。你能打印处理那你运气好(我记得这个地址不能访问的呀)。
我上面说了,printf函数参数可以输入不定参数,printf根据第一个参数来格式化后面的参数。
所以你既然输出%c,那不管你怎么转,最后解析按char解析,但编译的时候如果类型和要格式化的不一致(通过类型提升可一致不报错)会报warnnig,所以b有报警,a里2,3也报警。
c错误是因为你括号少了一个,如果你是笔误,通过上面解析你应该能明白。