对二维数组名进行sizeof()

本文解析了在64位编译环境下,针对二维整数数组a的sizeof运算结果,探讨了*a和**a所代表的不同内存大小。重点在于理解数组和指针在内存中的布局。

一道笔试题

//64位编译环境
int a[2][4];
cout << sizeof(a) << endl;//32
cout << sizeof(*a) << endl;//16
cout << sizeof(**a);//4

a表示2*4的int数组,一个int是4字节,所以输出32
*a表示a[0][4],二维数组的第一行,4 * 4=16
**a表示a[0][0],二维数组的第一行的第一个元素,4

C++ 中,使用 `sizeof` 运算符可以计算二维数组的大小。`sizeof` 返回的是数组在内存中占用的总字节数。例如,对于一个定义为 `int arr[2][3]` 的二维数组,可以通过 `sizeof(arr)` 获取整个数组占用的字节数[^4]。 进一步分析,如果想要知道二维数组中一行的大小,可以使用 `sizeof(arr[0])`,这将返回一行所占的字节数[^4]。而单个元素的大小可以通过 `sizeof(arr[0][0])` 得到[^4]。 要计算二维数组的行数,可以将整个数组的大小除以一行的大小,即 `sizeof(arr) / sizeof(arr[0])`[^4]。同样,要得到每行中的元素数量(列数),可以将一行的大小除以单个元素的大小,即 `sizeof(arr[0]) / sizeof(arr[0][0])`[^4]。 以下是一个具体的代码示例来演示如何使用 `sizeof` 来计算二维数组的大小: ```cpp #include <iostream> using namespace std; int main() { int arr[2][3] = { {1,2,3}, {4,5,6} }; // 输出整个二维数组在内存中占用字节数 cout << "Size of 2D array: " << sizeof(arr) << " bytes" << endl; // 输出一行的大小 cout << "Size of one row: " << sizeof(arr[0]) << " bytes" << endl; // 输出一个元素的大小 cout << "Size of one element: " << sizeof(arr[0][0]) << " bytes" << endl; // 计算并输出行数 cout << "Number of rows: " << sizeof(arr) / sizeof(arr[0]) << endl; // 计算并输出列数 cout << "Number of columns: " << sizeof(arr[0]) / sizeof(arr[0][0]) << endl; return 0; } ``` 需要注意的是,当将数组作为参数传递给函数时,数组会退化为一个指针,这时 `sizeof` 运算符将不再能够正确地计算数组的大小。因此,为了保持数组的类型信息,应该通过模板函数传递数组引用[^2]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值