msc*_*msc 12 c arrays sizeof comma c11
我写了关于sizeof运算符的代码.如果我写的东西如下:
#include <stdio.h>
int main() {
char a[20];
printf("%zu\n", sizeof(a));
return 0;
}
Run Code Online (Sandbox Code Playgroud)
输出:
20 // Ok, it's fine
Run Code Online (Sandbox Code Playgroud)
但是,如果我使用这样的逗号运算符:
#include <stdio.h>
int main() {
char a[20];
char b;
printf("%zu\n", sizeof(b, a));
return 0;
}
Run Code Online (Sandbox Code Playgroud)
输出:
8 // Why the output 8?
Run Code Online (Sandbox Code Playgroud)
所以,我有一个问题:
8在第二个例子中提供输出?comma运营sizeof()商对运营商的行为是什么?Pet*_*ter 12
逗号运算符没有特殊含义sizeof.
sizeof(b, a) 检查完整的表达式(b, a),计算出结果类型,并计算该类型的大小而不进行实际评估(b , a).正如chqrlie在注释中所指出的那样,它()是表达式(评估结果的大小)的一部分.
在这种情况下,b是一个char并且a是一个数组.如果b, a要评估表达式,b将首先评估表达式,结果将被丢弃.然后a转换为指针(char *),其值等于&a[0]表达式的结果(b, a).
由于b, a类型的结果char *, sizeof(b,a)等于sizeof (char *).这是一个实现定义的值,但对于您的编译器,其值为8 (这可能意味着代码是作为64位应用程序构建的).
Bas*_*tch 11
在大多数情况下,数组会衰减为指针.所以b,a 带逗号运算符的类型是char*(不再是char[20]).并且指针在您的计算机上是8个字节.
顺便说一下,我认为sizeof在一些逗号操作符上使用对读者来说真的很困惑.我建议sizeof在简单表达式或类型上使用.
(我刚刚发现这是C和C++之间的一个棘手的差异;请参阅此解释)
| 归档时间: |
|
| 查看次数: |
434 次 |
| 最近记录: |