C++ sizeof()函数的参数为指针和数组的值为什么不同

sizeof()的参数为指针和数组

C++或C语言中,都可以使用sizeof()函数来计算数组的字节大小,除此之外,在C++和C语言中,都可以使用一个指向数组第一个元素的内存地址的指针来引用数组,因此,如果要计算数组的字节大小,或长度,传递数组本身或传递指向数组的指针给sizeof()函数似乎都是可以的,实际上则不然,二者有本质上的区别。我们可以先来看一个实例,如下:

cpp 复制代码
#include <iostream>
using namespace std;


int main(){
    int arr[] = {1,2,3};
    // 计算arr的大小
    int n = sizeof(arr);
    // 定义一个指针指向数组arr
    int *p = arr;
    // 将指针p传递给sizeof()
    int m = sizeof(p);
    cout << n << std::endl;
    cout << m << std::endl;
    
    return 0;
}

如上代码,编译运行之后,输出的n和m的值是不同的!这是为什么呢?

不同值的原因

这主要是因为当sizeof()函数的参数是数组本身,将计算的是数组的大小,而如果传递的是指针作为参数,那计算的便是指针的大小,而不是整个数组的。

来源笨鸟工具

原文C++ sizeof()的参数为指针和数组的区别

免责声明:内容仅供参考,不保证正确性。

相关推荐
旖-旎10 分钟前
二分查找(x的平方根)(4)
c++·算法·二分查找·力扣·双指针
用头发抵命21 分钟前
Vue 3 中优雅地集成 Video.js 播放器:从组件封装到功能定制
开发语言·javascript·ecmascript
ECT-OS-JiuHuaShan26 分钟前
朱梁万有递归元定理,重构《易经》
算法·重构
似水明俊德35 分钟前
02-C#.Net-反射-学习笔记
开发语言·笔记·学习·c#·.net
顶点多余40 分钟前
使用C/C++语言链接Mysql详解
数据库·c++·mysql
汉克老师43 分钟前
GESP2026年3月认证C++四级( 第二部分判断题(1-10))
c++·指针·函数重载·文件操作·数组·gesp4级·gesp四级
于先生吖1 小时前
Java框架开发短剧漫剧系统:后台管理与接口开发
java·开发语言
智者知已应修善业1 小时前
【51单片机独立按键控制数码管移动反向,2片74CH573/74CH273段和位,按键按下保持原状态】2023-3-25
经验分享·笔记·单片机·嵌入式硬件·算法·51单片机
khddvbe1 小时前
C++并发编程中的死锁避免
开发语言·c++·算法
C羊驼1 小时前
C语言:两天打鱼,三天晒网
c语言·经验分享·笔记·算法·青少年编程