C语言中的字符串和数组

Strings and Arrays in C language

#include <stdio.h>
int main() 
{ 
    printf("%d", "123456"[1]);
    return 0;
}

预期的输出是123456,但实际输出是50,这是为什么?

"123456"[1]给出字符'2'。该字符的 ascii 值是 50.

要打印完整数字,请执行以下操作:printf ("%d", 123456);printf ("%s", "123456");

您正在尝试使用 %d 打印一个整数,但您提供的是一个字符。要获得预期的输出,您必须提供一个整数作为 printf 的第二个参数,或者使用 %s 作为格式说明符。

printf ("%d", 123456);printf ("%s", "123456");

现在,关于输出的解释 50 你得到:

此处,“123456”是 const char *,因此当您尝试使用 [1] 从特定索引获取值时,它会使用 [=15] 的索引 1 =] 即 char 2.

index -> 0 1 2 3 4 5

input -> 1 2 3 4 5 6

现在,当您使用格式说明符 %d(整数)打印时,它打印了 char 2 的 ASCII 值,即 50.

如果您需要准确的字符串,则不需要格式说明符 你可以简单地做

printf("123456");

您得到的输出为 50,因为在 C 中,字符串被视为 char 数组,它也可以根据格式说明符对值进行类型转换。

所以这里“123456”变成了一个数组。 1 索引处的字符为 2。 和 char "2" 的整数值,即 2 的 ascii 值是 50。 因此输出。