打印s[3]的地址时为何出现编译错误?
printf格式符与参数类型不匹配导致编译错误
你的代码编译报错的核心原因是printf格式符和传入参数的类型不兼容:
%c格式符用于打印单个字符,要求传入的参数是char类型的数值(即字符本身);- 但你传入的
&s[3]是s[3]的内存地址,属于char*指针类型,和%c期望的类型完全不匹配,因此编译器会抛出类型错误。
修正方案
要正确打印s[3]的字符,有两种可行写法:
- 直接传入字符本身(最常用):
printf("s[3]==>%c\n", s[3]);
- 通过解引用指针获取字符值(如果非要用地址的话):
printf("s[3]==>%c\n", *(&s[3]));
另外提一句:你代码里的注释p=s[0];是错误的,p是指针类型,s[0]是char类型,正确赋值就是p = s;——数组名s会隐式转换为指向数组首元素的指针,和p的类型匹配。
内容的提问来源于stack exchange,提问作者leejoonhoo
相关产品推荐
相关产品推荐

