关于C++函数中数组名形参退化成指针的深究

115 阅读1分钟

记录一次学习C++过程中,函数中数组名形参退化成指针的深究,直接上代码

  • arr[]会退化为指针,等价于int *arr
  • 在C++PrimerPlus描述中,数组名是一个地址常量(不可运算),指针是变量
  • 如果没有上述的等价关系,相当于再给一个常量赋值
  • 同时,两个数组名不可以同时赋值也是如此(两个常量赋值操作是不允许的)
int func(char arr[]) {
    printf("sizeof=%d\n", sizeof(arr));
    printf("strlen=%d\n", strlen(arr));
}

int main() {
    char array[] = "Hello World";
    printf("sizeof=%d\n", sizeof(arr));
    printf("strlen=%d\n", strlen(arr));
    func(arr);
}


输出结果:

sizeof=12

strlen=11

sizeof=8

strlen=11