sizeof()表达式

-3 c++ arrays pointers sizeof

任何人都可以解释我这段代码:

int a[]={1,2,3},b[]={6,7,8},c;

c=sizeof(!a+b);

cout<<c;
Run Code Online (Sandbox Code Playgroud)

我得到了输出:8.但我不明白为什么.

Bat*_*eba 8

ab在此上下文衰减到指针类型.

所以表达式!a+b是一种int*类型.我们需要进入一个更详细一点这里:!a实际上是一个bool类型,并添加到int*类型为int*类型(认为指针运算下的隐式转换boolint).

sizeof(int*) 在你的平台上是8.


注:sizeof始终在C++编译时进行评估.


gsa*_*ras 8

你必须阅读sizeof(!a+b);从最内层到最外层的表达.

  1. a衰败到int*.
  2. b 衰败到 int*
  3. !a属于类型bool,因为应用了逻辑NOT运算符 a.
  4. !a+b 是类型的 bool + int* --> int + int* --> int*

所以你基本上做到了:

sizeof(int*)
Run Code Online (Sandbox Code Playgroud)

这是指针的大小,在你的系统中等于8.