C程序Strings例子结果怎么是98?

标签 c string dynamic-arrays c-strings

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/

相关文章:

c++ - "Grow"动态数组函数产生错误

delphi - 当参数类型为开放Char数组时,是否允许使用动态Char数组?

c - 字符串初始化和使用 strdup() 有什么不同

c - XOR 加密适用于不在 Visual Studio 2017 上的代码块

c - C 中的按位操作

java - 为什么我会收到此错误 'illegal start of type' ?

r - 字符串将值拆分为两列,然后将它们连接成一个新列

c - 在c中修剪字符串时遇到麻烦

C 动态字符串数组

用 memcpy 复制两个 char* 到 **buff - C 语言