新版红双喜百度百科:有人会C语言啊??

来源:百度文库 编辑:高校问答 时间:2024/05/05 07:06:15
下面的程序运行后: main() { int a=10,b=20; int *pa=&a;*pb=&b; *pa=*(pb-1)+5; *(pa+1)=*pa-5; printf("a=%d,b=%d\n",a,b); } a的值为: ________。(分数:1, 完成次数:482)
A.
10

B. 15
C. 25
D. 20

你在看看 你的题
*pa=*(pb-1)+5这里
pb-1表示地址减一 这将是一个不确定的值
无法做出判断
还有pa+1也是这样 这个更危险 有可能操成你的系统无法使用
因为你要写入的pa+1这个地址是未知的 你不知道他里面的数据是什么
如果是系统的数据那你的系统都要出错

这是一道选择题,不是实际问题。解决如下:
*pa=*(pb-1)+5;
pb-1的值为pa的值,因为a,b是整数指针,并且二者连续声明。所以编译时a、b地址连续。而pa = &a, pb = &b。所以这一语句等加于a = a + 5 = 15。

同理:
*(pa+1)=*pa-5;
pa+1的值为pb的值。这条语句等加于b = a - 5 = 10

答案:B

main() {
int a=10,b=20;
int *pa=&a,*pb=&b;
*pa=*(pb-1)+5;
*(pa+1)=*pa-5;
printf("a=%d,b=%d\n",a,b); }
这个程序本身就是一个问题程序阿
由于a,b不是数组,而且题中也没有指定分配连续空间
所以,a,b每次都分配连续空间的情况是不大可能的。而且pb-1表示地址减一 ,可是这个地址却未知,所以*(pb-1)这将是一个不确定的值 。所以程序结果根本不能判断,有可能出现死机,还有每运行一次都是不同结果的现象。

当然就像 楼上的朋友说的那样,这是一个选择题,可以选出正确答案的前提是a,b恰好分配了连续的存储空间(这是可能的),那么就应该按可以分配连续的存储空间算。即a=15,b=10 选B