我有这个程序
#include <stdio.h>
int main()
{
char arr[100];
printf("%d", (int)sizeof(0,arr));
}
当编译为C文件时,它将输出4;作为C++文件时,将打印100。为什么?我正在使用gcc。
最佳答案
在C中,逗号运算符的右操作数的结果具有类型和值。在C中,逗号运算符不会产生左值。因此,存在从左值到右值的转换,从而导致数组类型衰减为指针类型。因此,在C语言中,您得到的是sizeof(char*)
的结果。
在C++中,逗号表达式的结果是一个左值。没有这样的转换(如在C中),您得到的是sizeof(arr)
,即100