📜  门| GATE-CS-2007 |第 38 题(1)

📅  最后修改于: 2023-12-03 14:58:27.451000             🧑  作者: Mango

题目描述

以下是 GATE CS 2007 的第 38 题:

以下是一个名为 defDouble(int *p) 的 C 函数:

void defDouble(int *p) {
    *p *= 2;
}

现在考虑以下 C 代码:

int main() {
    int a[] = {0, 1, 2, 3};
    int *p = a;
    defDouble(p++);
    printf("%d, %d\n", *p, *(++p));
    return 0;
}

这个程序的输出是什么?

分析与解答

注意到 p++ 操作会使得 p 指向 1 这个整数,即指向了 a 数组的第二个元素。然而,defDouble 函数执行的是 *p *= 2 操作,即将 p 指向的元素乘以 2

因此,此时 a 数组的第一个元素仍为 0,第二个元素变为了 2,第三个元素变为了 2,第四个元素变为了 3。最终输出的结果为:

2, 4

此题考察了指针与数组的基本知识。

Markdown 代码

以下是 Markdown 格式的代码片段:

## 题目描述

以下是 GATE CS 2007 的第 38 题:

以下是一个名为 `defDouble(int *p)` 的 C 函数: 

```c
void defDouble(int *p) {
    *p *= 2;
}

现在考虑以下 C 代码:

int main() {
    int a[] = {0, 1, 2, 3};
    int *p = a;
    defDouble(p++);
    printf("%d, %d\n", *p, *(++p));
    return 0;
}

这个程序的输出是什么?

分析与解答

注意到 p++ 操作会使得 p 指向 1 这个整数,即指向了 a 数组的第二个元素。然而,defDouble 函数执行的是 *p *= 2 操作,即将 p 指向的元素乘以 2

因此,此时 a 数组的第一个元素仍为 0,第二个元素变为了 2,第三个元素变为了 2,第四个元素变为了 3。最终输出的结果为:

2, 4

此题考察了指针与数组的基本知识。