📜  C |数组|问题9

📅  最后修改于: 2021-05-25 21:06:39             🧑  作者: Mango

预测以下程序的输出:

#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基础课程》。