gpt4 book ai didi

c - 奇怪地无法理解使用 printf 的程序输出

转载 作者:太空狗 更新时间:2023-10-29 16:57:58 25 4
gpt4 key购买 nike

当我找到这段代码时,我正在处理一些面试问题。

#include<stdio.h>
int main()
{
short int a=5;

printf("%d"+1,a); //does not give compiler error

return 0;
}

打印如下:

d

我无法理解这里的 printf 函数是如何工作的。

最佳答案

让我们看一下 printf() 调用的第一个参数。

"%d" + 1

这指向与 ptr 在以下代码中所做的相同的事情。

char *ptr = "%d";
ptr = ptr + 1;

那么,递增指针是什么意思?好吧,我们将指针向前推进 sizeof(*ptr) * 1 字节。

因此,在内存中我们有:

%d\0
^^
||
|This is where ("%d" + 1) points to.
This is where ("%d") points to.

因此,您的代码在功能上或多或少等同于:

short int a = 5;
printf("d", a);

它将评估然后忽略额外的函数参数并打印 d


还有一件事:您非常接近在该代码中导致未定义的行为。 printf("%d", a) 使用了错误的格式字符串。 short int 的正确格式字符串是 "%hd"

您可以找到完整的格式字符串表 here .

关于c - 奇怪地无法理解使用 printf 的程序输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26063729/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com