responseString = Optional({"success":false,"msg":"Invalid Method"})
我期待的是,
1.输入输入。
2.读取输入和返回输入值
3.评估价值的大小。
4.打印sizeof值。
但第一步永远不会发生。
为什么第一步不会发生?
答案 0 :(得分:4)
sizeof
运算符不会计算其操作数,除非它的类型是可变长度数组类型:它查看类型并返回大小。这非常安全:
char *ptr = NULL; // NULL ponter!
printf("%zu", sizeof *ptr);
它将返回1
,因为它不必评估表达式以了解答案。
答案 1 :(得分:2)
我的期望是,1。输入输入。 2.读取输入和返回输入值。 3.评估值的大小4.打印sizeof值。
但第一步永远不会发生。为什么第一步不会发生?
因为除了极少数例外,this.updateStyles();
运算符不会计算其操作数。您的使用不是例外情况之一。不评估sizeof
意味着不会调用getchar()
。
无论如何,我不确定您对代码的期望。即使getchar()
被调用,结果也始终具有相同的类型(getchar()
),这不依赖于输入。
还要注意@ P.P.的评论。您的int
格式与正在打印的数据类型printf()
不匹配。正如他所观察到的那样,size_t
调用因此具有未定义的行为。
答案 2 :(得分:1)
因为getchar()
返回类型是a
,而不是int
。 <{1}}在您的平台上为4。
此外,您应该使用char
来打印sizeof(int)
值。在技术上使用不正确的格式说明符undefined behaviour。
答案 3 :(得分:1)
在C中,sizeof运算符仅在运行时针对可变大小数组(VLA)进行评估。在所有其他情况下,运算符也不会评估其操作数。它推导出表达式的类型,并返回推导类型的对象大小。