相关疑难解决方法(0)

为什么sizeof被认为是运营商?

为什么被sizeof认为是操作员而不是功能?

有资格成为运营商需要什么财产?

c operators sizeof

86
推荐指数
4
解决办法
2万
查看次数

为什么 sizeof(x)++ 编译?

我遇到了以下代码片段:

int a = 3;
printf("%d", sizeof(a)++);
Run Code Online (Sandbox Code Playgroud)

显然,这将使用 GCC 9.3.0 和 -std=c99 进行编译。虽然这不编译:

printf("%d", sizeof(3)++);
Run Code Online (Sandbox Code Playgroud)

GCC 打印错误

错误:左值需要作为增量操作数

在我编译第一个片段之前,我会预料到会出现这样的错误。

后缀 ++ 运算符的操作数应为 C99 标准的左值

后缀递增或递减运算符的操作数应具有限定或非限定的实数或指针类型,并且应为可修改的左值。

关于 sizeof Operator 的返回值(如预期):

sizeof 运算符产生其操作数的大小(以字节为单位),它可以是表达式或类型的括号名称。大小由操作数的类型决定。结果是一个整数。如果操作数的类型是变长数组类型,则对操作数求值;否则,不计算操作数并且结果是整数常量。

结果的值是实现定义的,其类型(无符号整数类型)是 size_t,定义在(和其他头文件)中。

sizeof(a)++编译怎么可能?这是未定义的行为还是我错过了什么?

c c99

44
推荐指数
1
解决办法
618
查看次数

sizeof() 函数后跟方括号

我看过一个例子,显示为

int n = sizeof(0)["abcdefghij"];
cout<<n;
Run Code Online (Sandbox Code Playgroud)

方括号里的那个东西是什么意思?我在某处读过(0)["abc"]相当于("abc")[0]. 意思是上面的表达式很简单

n = sizeof("abcdefghij")[0]; 
Run Code Online (Sandbox Code Playgroud)

即第一个元素。

c++

2
推荐指数
1
解决办法
110
查看次数

标签 统计

c ×2

c++ ×1

c99 ×1

operators ×1

sizeof ×1