预测以下程序的输出:
null
#include <stdio.h> #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个元素被添加到数组的最后一个元素。然后将结果添加到数组的第一个元素中。 这个问题的小测验
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END