- 当我们创建一个数据,想要计算数组的大小:
int arr[5] = {1,2,3,4,5};
int arrsize = sizeof(arr)/sizeof (arr[0]);
int arrsize2 = sizeof(arr)/sizeof (int);
qDebug() << "before: arrsize = " << arrsize;
qDebug() << "before: arrsize2 = " << arrsize2;
执行结果后,大小是5
2. 当改数组作为参数传递给函数后,就不能用这种方式计算大小。
void ArraySize::print(int *p)
{
qDebug() << "";
int arrsize = sizeof(p)/sizeof (p[0]);
int arrsize2 = sizeof(p)/sizeof (int);
qDebug() << "after: arrsize = " << arrsize;
qDebug() << "after: arrsize2 = " << arrsize2;
qDebug() << "*p_size =" << sizeof(p);
qDebug() << "*p[0]_size =" << sizeof(p[0]);
for (int i = 0; i < 5; i++)
{
qDebug() << "*p[" << i << "] = " << p[i];
}
}
执行结果后,大小是2,结果是错的
因为传递后,sizeof§的大小其实是指针的大小,在32位系统中,大小是4, 在64位系统中,大小是8. p[0]是int,大小为4。所以结果是2.而真实应该为5,所以这种方式是错的。
3. 如果参数是数组,结果和指针是一样的,都是错的。因为指针和数组在本质上是一致的。
void ArraySize::print2(int p[5])
{
qDebug() << "";
qDebug() << "*p_size =" << sizeof(p);
qDebug() << "*p[0]_size =" << sizeof(p[0]);
for (int i = 0; i < 5; i++)
{
qDebug() << "*p[" << i << "] = " << p[i];
}
}
执行结果后,大小是2,结果是错的
4. 如果想要成为函数参数后使用数组大小,就必须把大小作为参数传递过去。
void ArraySize::print3(int *p, int size)
{
qDebug() << "";
qDebug() << "size =" << size;
qDebug() << "*p_size =" << sizeof(p);
qDebug() << "*p[0]_size =" << sizeof(p[0]);
for (int i = 0; i < 5; i++)
{
qDebug() << "*p[" << i << "] = " << p[i];
}
}
执行结果;