考虑下面的程序。
#include
void fun(int arr[])
{
int i;
/* sizeof should not be used here to get number
of elements in array*/
int arr_size = sizeof(arr)/sizeof(arr[0]); /* incorrect use of sizeof*/
for (i = 0; i < arr_size; i++)
{
arr[i] = i; /*executed only once */
}
}
int main()
{
int i;
int arr[4] = {0, 0 ,0, 0};
fun(arr);
/* use of sizeof is fine here*/
for(i = 0; i < sizeof(arr)/sizeof(arr[0]); i++)
printf(" %d " ,arr[i]);
getchar();
return 0;
}
输出:在IA-32机器上为0 0 0 0。
函数fun()接收一个数组参数arr [],并尝试使用sizeof运算符找出arr []中的元素数量。
在C中,阵列参数均被视为指针(见本的详细信息)。因此,表达式sizeof(arr)/ sizeof(arr [0])变为sizeof(int *)/ sizeof(int),这导致IA 32位计算机为1(int和int *的大小为4),并且内部的for循环fun()仅执行一次,而与数组的大小无关。
因此,在这种情况下,不应使用sizeof来获取元素数量。数组大小(或长度)的单独参数应传递给fun()。因此,更正后的程序是:
#include
void fun(int arr[], size_t arr_size)
{
int i;
for (i = 0; i < arr_size; i++)
{
arr[i] = i;
}
}
int main()
{
int i;
int arr[4] = {0, 0 ,0, 0};
fun(arr, 4);
for(i = 0; i < sizeof(arr)/sizeof(arr[0]); i++)
printf(" %d ", arr[i]);
getchar();
return 0;
}
要从最佳影片策划和实践问题去学习,检查了C++基础课程为基础,以先进的C++和C++ STL课程基础加上STL。要完成从学习语言到DS Algo等的更多准备工作,请参阅“完整面试准备课程” 。