📅  最后修改于: 2023-12-03 15:37:15.164000             🧑  作者: Mango
该题为ISRO CS 2014考试的第57个问题,题目描述如下:
在以下C程序中,当语句“q = p”执行后,q和p的值分别是什么?
int main()
{
int x=10, y=20;
int *p=&x, *q=&y;
p=q;
q=p;
printf("%d, %d", *p, *q);
return 0;
}
这道题目考查的是C语言指针的基本概念和操作技巧。
解题思路:
首先,我们需要知道的是,p和q是两个指向整型变量的指针,p的初始值指向变量x的地址,q的初始值指向变量y的地址。
其次,对于指针的赋值操作,只是将指针变量的值(即地址)改变了,并不会改变指针变量所指向的内存单元中的值。
在程序的第6行中,“p=q”这一语句执行后,p指向了变量y的地址,即p和q都指向了变量y的地址。
接着在程序的第7行中,“q=p”这一语句又执行了一次指针变量的赋值操作,将q指向了变量x的地址,即p和q都指向了变量x的地址。
最后,在程序的第8行中,将指针变量p和q所指向的内存单元中的整型值输出。此时,p和q都指向了变量x的地址,因此p和q的值都是10。
因此,该程序输出的结果为“10, 10”。
代码实现:
## 解题思路:
- 首先,我们需要知道的是,p和q是两个指向整型变量的指针,p的初始值指向变量x的地址,q的初始值指向变量y的地址。
- 其次,对于指针的赋值操作,只是将指针变量的值(即地址)改变了,并不会改变指针变量所指向的内存单元中的值。
- 在程序的第6行中,“p=q”这一语句执行后,p指向了变量y的地址,即p和q都指向了变量y的地址。
- 接着在程序的第7行中,“q=p”这一语句又执行了一次指针变量的赋值操作,将q指向了变量x的地址,即p和q都指向了变量x的地址。
- 最后,在程序的第8行中,将指针变量p和q所指向的内存单元中的整型值输出。此时,p和q都指向了变量x的地址,因此*p和*q的值都是10。
因此,该程序输出的结果为“10, 10”。
## 代码实现:
```c
int main()
{
int x=10, y=20;
int *p=&x, *q=&y;
p=q;
q=p;
printf("%d, %d", *p, *q);
return 0;
}