预测以下程序的输出:
#include
#define SIZE(arr) sizeof(arr) / sizeof(*arr);
void fun(int* arr, int n)
{
int i;
*arr += *(arr + n - 1) += 10;
}
void printArr(int* arr, int n)
{
int i;
for(i = 0; i < n; ++i)
printf("%d ", arr[i]);
}
int main()
{
int arr[] = {10, 20, 30};
int size = SIZE(arr);
fun(arr, size);
printArr(arr, size);
return 0;
}
(A) 20 30 40
(B) 20 20 40
(C) 50 20 40
(D)编译时错误答案: (C)
说明:问题的症结在于表达式: * arr + = *(arr + n – 1)+ = 10;复合运算符(此处+ = )具有从右到左的关联性。前10个添加到数组的最后一个元素。然后将结果添加到数组的第一个元素。
这个问题的测验
想要从精选的最佳视频中学习和练习问题,请查看《基础知识到高级C的C基础课程》。