• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录

wb-code

  • 博客园
  • 联系
  • 订阅
  • 管理

公告

View Post

C与C++中数组退化为指针的情况

数组退化的常见场景:
1、函数的参数传递

void func(int arr[]) { // 实际上是指针 int* arr
    // sizeof(arr) 是指针大小,不是数组大小
}

int main() {
    int arr[5] = {1, 2, 3, 4, 5};
    func(arr); // arr退化为int*
}

2、赋值给指针

int arr[5] = {1, 2, 3, 4, 5};
int* ptr = arr; // 自动退化
  1. 算术运算
int arr[5] = {1, 2, 3, 4, 5};
int* ptr = arr + 2; // arr退化为指针后做指针运算

不会退化的例外情况:

  1. sizeof运算符
int arr[5] = {1, 2, 3, 4, 5};
printf("%zu\n", sizeof(arr)); // 20(5*4),不是指针大小
  1. &运算符
int arr[5];
int (*ptr)[5] = &arr; // 获取的是整个数组的指针
  1. 字符串初始化
char str[] = "hello"; // 不会退化

重要注意事项:
1、丢失大小信息:退化后,编译器不知道数组的边界
2、无法拷贝数组:数组名不能直接赋值给另一个数组
3、指针和数组的差异:

posted on 2025-12-12 17:29  心事不在脸上  阅读(2)  评论(0)    收藏  举报

刷新页面返回顶部
 
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3