%s指定了格式,函数用字符串指针的格式来理解str
如果只要输出地址值,用%d,是按照整型格式来理解str
多说一点,如果用%d来解析浮点类的,是得不到浮点值的,因为格式理解错误,并且不会去进行隐式类型转换,需要用%f,或者显示的进行转换.
这个得从printf说起。
当printf的内部扫描到“%s”时,他就会找到对应的指针参数,然后从指针的当前位置挨个往后输出,一直遇到字符串的结束标志位(0)。
很多字符串处理函数都是这样的原理,你可以参考一下
str是字符串,结尾有'\0',根据这个识别的(其实string.h里的函数都是利用这个的,所以没有'\0'的字符串是很危险的)。
顺便说一句printf其实并不安全。因为是变参函数,所以没有类型检查,拿来就用。
printf从str开始读字节,一直遇见\0
视为字符串结束