Win64,VS2017,下数组名相关占用的字节大小
#include <iostream>
using namespace std;
void pointerSize(double* mat)
{
cout << "mat字节大小:" << sizeof(mat) << endl;
cout << "mat[0]字节大小:" << sizeof(mat[0]) << endl;
}
void pointerSize2(double* mat2)
{
cout << "mat2字节大小:" << sizeof(mat2) << endl;
cout << "mat2[0]字节大小:" << sizeof(mat2[0]) << endl;
}
void shuzuSize(double mat[3])
{
cout << "mat字节大小:" << sizeof(mat) << endl;
cout << "mat[0]字节大小:" << sizeof(mat[0]) << endl;
}
void shuzuSize2(double mat2[3][3])
{
cout << "mat2字节大小:" << sizeof(mat2) << endl;
cout << "mat2[0]字节大小:" << sizeof(mat2[0]) << endl;
cout << "mat2[0][0]字节大小:" << sizeof(mat2[0][0]) << endl;
}
int main()
{
double mat[3] = { 0 };
double mat2[3][3] = { 0 };
cout << "数组作为实参。" << endl;
cout << "mat字节大小:" << sizeof(mat) << endl;
cout << "mat[0]字节大小:" << sizeof(mat[0]) << endl;
cout << "\t数组名mat传入形参为同样数组的函数。" << endl;
shuzuSize(mat);
cout << "\t数组名mat传入形参为指针的函数。" << endl;
pointerSize(mat);
cout << endl;
cout << "数组作为实参。" << endl;
cout << "mat2字节大小:" << sizeof(mat2) << endl;
cout << "mat2[0]字节大小:" << sizeof(mat2[0]) << endl;
cout << "mat2[0][0]字节大小:" << sizeof(mat2[0][0]) << endl;
cout << "\t数组名mat2传入形参为同样数组的函数。" << endl;
shuzuSize2(mat2);
cout << "\t数组名mat2[0]传入形参为指针的函数。" << endl;
pointerSize2(mat2[0]);
return 0;
}
输出结果如下:
数组作为实参。
mat字节大小:24
mat[0]字节大小:8
数组名mat传入形参为同样数组的函数。
mat字节大小:4
mat[0]字节大小:8
数组名mat传入形参为指针的函数。
mat字节大小:4
mat[0]字节大小:8
数组作为实参。
mat2字节大小:72
mat2[0]字节大小:24
mat2[0][0]字节大小:8
数组名mat2传入形参为同样数组的函数。
mat2字节大小:4
mat2[0]字节大小:24
mat2[0][0]字节大小:8
数组名mat2[0]传入形参为指针的函数。
mat2字节大小:4
mat2[0]字节大小:8
可见数组名一旦传入形参后,其就变成了一个指针变量,用sizeof计算其字节时,得到指针本身所占空间的大小,x86下为4字节,x64下为8字节,此处是x86下,故作为形参其字节为4,且任意类型的指针都占4个字节。mat[0]则表示1个double类型,即8个字节。mat2[0]表示二维数组首行数据的字节数。