C 程序字符串例子结果怎么是98?
#include <stdio.h>
int main()
{
char s[]="%d%d%d";
int a=9,b=8,c=5;
printf(s+2,a,b,c);
return 0;
}
最佳答案
string + x
是一个名为 Pointer Arithmetic 的操作.
这样您就可以提供对数学计算的内存区域的引用,并且在语义上它等同于 &string[x]
计算背后实际发生了什么:
(&string + (x * sizeof(*string)))
这就是为什么它在应用于指针时是一个非常具体的概念。这代表数组,而且它们最终会衰减到指向第一个元素的指针。
至于您的代码,您有以下字符串:
char s[]="%d%d%d";
并作为 printf 的格式字符串传递,后两个字节,它明确提供对 "%d%d"
因此:
printf(s+2,a,b,c);
稍后解析为:
printf("%d%d",a,b,c);
printf除了要读取的两个整数之外,第三个整数将被简单地忽略。
关于C程序Strings例子结果怎么是98?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30763125/