📅  最后修改于: 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 格式的代码片段:
## 题目描述
以下是 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
此题考察了指针与数组的基本知识。