为什么(1)[“ abcd”] +“ efg”-'b'+ 1变成“ fg”?

0x90
#include <stdio.h>
int main()
{
    printf("%s", (1)["abcd"]+"efg"-'b'+1);
}

有人可以解释为什么此代码的输出是:

fg

我知道(1)["abcd"]指向"bcd"但为什么+"efg"-'b'+1甚至是有效的语法?

亚当·利斯

关于其他两个答案之间的差异似乎有些困惑。这是逐步发生的情况:

(1)["abcd"]+"efg"-'b'+1

第一部分,(1)["abcd"]利用C中处理数组的方式。让我们看一下以下内容:

int a[5] = { 0, 10, 20, 30, 40 };
printf("%d %d\n", a[2], 2[a]);

输出将是20 20为什么?因为数组名称int求值为其地址,并且其数据类型为的指针int引用整数数组元素会告诉C向数组的地址添加一个偏移量,并将结果评估为type int但这意味着C不在乎顺序a[2]完全一样2[a]

同样,由于a是数组a + 1的地址,因此是元素在数组中第一个偏移处的地址。当然,这等效于1 + a

C中的字符串只是表示type数组的另一种人类友好方法char所以(1)["abcd"]是相同的,在所述第一偏移的元件返回到字符数组abcd\0...这是字符b

在C语言中,每个字符都有一个整数值(通常是其ASCII码)。的值b恰好是98。因此,评估的其余部分包括使用整数和一个数组进行计算:字符串"efg"

我们有字符串的地址。我们加减98(字符的ASCII值b),然后加1。b相互抵消,因此最终结果比字符串中第一个字符的地址多一个。性格f

%s在转换printf()告诉C治疗的地址作为一个字符串的第一个字符,直到它遇到末尾的空字符打印整个字符串。

这样就打印出来了fg,这是"efg"从处开始的字符串的一部分f

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

为什么在JavaScript中(([[] === [])+ /-/)[1] ='a'和(1 + {})[(1 << 1)+1] ='b'是为什么?

来自分类Dev

为什么b =(a + = 1)在python中是无效的语法?

来自分类Dev

为什么SELECT'a'='b'='c'在MYSQL中返回1?

来自分类Dev

为什么(a => 1,b => 2){a}是语法错误?

来自分类Dev

为什么“ abc” [-1]会导致“ c”而不是“ b”?

来自分类Dev

为什么xarray reftime键的末尾突然变成1?

来自分类Dev

为什么 -1 在 C++ 中变成 -842150451?

来自分类Dev

如果工件中不存在请求的版本( abcd ),如何下载以前的构建版本( abcd-1 )

来自分类Dev

为什么要点.sort(function(a,b){return ab}); 返回-1、0或1?

来自分类Dev

a {0,1} | b {0,1}仅匹配“ a”,为什么?

来自分类Dev

为什么我的程序集输出处于字母位置?(1 + 1 = b)

来自分类Dev

“ fg%N”命令的功能是什么?

来自分类Dev

为什么在JavaScript中parseInt(“ 123abcd”)和parseInt(“ abcd123”)的结果不同?

来自分类Dev

为什么执行`git checkout -b 3_1`后我的master分支丢失了?

来自分类Dev

为什么套接字仅发送1KB(425B)数据?

来自分类Dev

为什么要为int b = 1 * a = 10;输入类型不匹配?

来自分类Dev

为什么仅在基函数总和为1的情况下定义B样条曲线?

来自分类Dev

为什么要使用 i = (i +1) & mask 递增,其中 mask 是 0b1111?

来自分类Dev

为什么将真正的变量布尔值转换为整数时会变成-1?

来自分类Dev

为什么将真正的变量布尔值转换为整数时会变成-1?

来自分类Dev

为什么第一个素数总是变成1而不是2

来自分类Dev

Javascript:当 o1 具有值且等于 b1 时,为什么将 b1 视为未定义

来自分类Dev

为什么在单个 Verilog 语句(即 ~x + 1'b1)中计算 2 的恭维会产生错误的答案?

来自分类Dev

b!= a&1是做什么的?

来自分类Dev

\\ x1b(B`是做什么的?

来自分类Dev

为什么+ !! {}等于1?

来自分类Dev

3行变成1条SQL

来自分类Dev

将以逗号分隔的行变成1列

来自分类Dev

PHP将2行变成1行

Related 相关文章

  1. 1

    为什么在JavaScript中(([[] === [])+ /-/)[1] ='a'和(1 + {})[(1 << 1)+1] ='b'是为什么?

  2. 2

    为什么b =(a + = 1)在python中是无效的语法?

  3. 3

    为什么SELECT'a'='b'='c'在MYSQL中返回1?

  4. 4

    为什么(a => 1,b => 2){a}是语法错误?

  5. 5

    为什么“ abc” [-1]会导致“ c”而不是“ b”?

  6. 6

    为什么xarray reftime键的末尾突然变成1?

  7. 7

    为什么 -1 在 C++ 中变成 -842150451?

  8. 8

    如果工件中不存在请求的版本( abcd ),如何下载以前的构建版本( abcd-1 )

  9. 9

    为什么要点.sort(function(a,b){return ab}); 返回-1、0或1?

  10. 10

    a {0,1} | b {0,1}仅匹配“ a”,为什么?

  11. 11

    为什么我的程序集输出处于字母位置?(1 + 1 = b)

  12. 12

    “ fg%N”命令的功能是什么?

  13. 13

    为什么在JavaScript中parseInt(“ 123abcd”)和parseInt(“ abcd123”)的结果不同?

  14. 14

    为什么执行`git checkout -b 3_1`后我的master分支丢失了?

  15. 15

    为什么套接字仅发送1KB(425B)数据?

  16. 16

    为什么要为int b = 1 * a = 10;输入类型不匹配?

  17. 17

    为什么仅在基函数总和为1的情况下定义B样条曲线?

  18. 18

    为什么要使用 i = (i +1) & mask 递增,其中 mask 是 0b1111?

  19. 19

    为什么将真正的变量布尔值转换为整数时会变成-1?

  20. 20

    为什么将真正的变量布尔值转换为整数时会变成-1?

  21. 21

    为什么第一个素数总是变成1而不是2

  22. 22

    Javascript:当 o1 具有值且等于 b1 时,为什么将 b1 视为未定义

  23. 23

    为什么在单个 Verilog 语句(即 ~x + 1'b1)中计算 2 的恭维会产生错误的答案?

  24. 24

    b!= a&1是做什么的?

  25. 25

    \\ x1b(B`是做什么的?

  26. 26

    为什么+ !! {}等于1?

  27. 27

    3行变成1条SQL

  28. 28

    将以逗号分隔的行变成1列

  29. 29

    PHP将2行变成1行

热门标签

归档