[英]C program printf char with string array
#include <stdio.h>
char world[] = "HelloProgrammingWorld";
int main()
{
printf("%s", world + world[6] - world[8]);
return 0;
}
output 將是 mmingWorld。
我知道“世界”將存儲在 memory 中,類似這樣。
0x6295616 H world[0]
0x6295617 e
0x6295618 l
0x6295619 l
0x6295620 o
0x6295621 P
0x6295622 r world[6]
0x6295623 o
0x6295624 g world[8]
0x6295625 r
0x6295626 a
0x6295627 m
0x6295628 m
0x6295629 i
0x6295630 n
0x6295631 g
0x6295632 W
0x6295633 o
0x6295634 r
0x6295635 l
0x6295636 d
但是計算output到“mmingWorld”的公式是什么。 我嘗試了幾種方法,但仍然無法達到那個詞。
world[6]
是字符串中的字符'r'
, world[8]
是字符串中的字符'g'
。 在 ASCII 中, 'r'
的數值為 114, 'g'
的數值為 103。
當您按名稱引用固定數組時,它會衰減為指向數組第一個元素的指針。
因此,您基本上將char*
指針指向字符串中的第一個字符,並使用指針算法將該指針向前推進114 - 103 = 11
個字符串中的字符數。 因此,您有效地將&world[11]
傳遞給printf()
,因此 output "mmingWorld"
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.