指针两题 急 谢谢

[复制链接]
查看11 | 回复5 | 2008-8-21 10:38:57 | 显示全部楼层 |阅读模式
1 有以下程序

void fun(char *a, char *b)

{ a=b; (*a)++; }

main ()

{ charc1='A', c2=a", *p1, *p2;

p1=&c1; p2=&c2;fun(p1,p2);

printf(“&c&c\n”,c1,c2);

}

程序运行后的输出结果是
Ab
B) aa
C) Aa
D) Bb
通过第二行a=b可知p1,p2指向的变量的值相同,那他们共同指向的是哪个变量呢,接下来该怎么做呢请详解

2有下列程序
Int a=2;
Int f (int *a);
{ return (*a)++;}
main()
{ int s=0;
{int a=5;
s+=f(&a);
}
s+=f(&a);
printf("%d\n",s);
}
执行输出的结果是 A10B9C 7D8
不明白

回复

使用道具 举报

千问 | 2008-8-21 10:38:57 | 显示全部楼层
真是郁闷啊,辛辛苦苦敲的答案竟然没提交成功,又得重敲一遍。这些问题看看书就明白了,我有空给你讲讲。(1)此问题重点在形参和实参的值传递问题,当执行fun(p1,p2); 时,此时形参a=p1,形参b=p2,在函数fun中,只操作形参a,b,不操作实参p1,p2,所以p1,p2的值不会变,仍然是c1,c2的地址。p1,p2指向的变量的值不同。在函数fun中a=b,即a=b=p2,(*a)即为变量c2,所以(*a)++即为c2++,所以执行完(*a)++后c2='b',而c1并没有被操作,c1还是为'A'.答案为 Ab注意形参的改变不会影响到实参 即a=b,并不会使p1=p2。(2)Int a=2;全局变量aInt f (i...
回复

使用道具 举报

千问 | 2008-8-21 10:38:57 | 显示全部楼层
第一题比较简单,a=b就是进行指针赋值,所有的修改都是指向c2,所以结果是Ab。第二题实质上是利用了变量声明的有效域,由于a=5声明在大括号中,对于第二个s+=(&a)将没有作用。...
回复

使用道具 举报

千问 | 2008-8-21 10:38:57 | 显示全部楼层
第二题选 B执行第一个s+=…………的时候在局部变量a的作用域内 所以此时a=5,执行完了后s=6执行第二个的时候,不在局部变量作用域内,此时a为全局变量的a,值为2,所以执行完后s=6+3=9...
回复

使用道具 举报

千问 | 2008-8-21 10:38:57 | 显示全部楼层
1.A 他们共同指向'a'. fun()函数中的(*a)++,说明对指向的地址中的值加1,也就是'a'+1,为'b'.所以这个时候c2的值为'b' 2.C考察变量的生命周期问题 f()函数的意思表明给定一个指针,返回指针所对应的地址的值+1. 在{ int a=5; s+=f(&a); } 语句中,a的值为5,用f()函数...
回复

使用道具 举报

千问 | 2008-8-21 10:38:57 | 显示全部楼层
1.Abp1,p2指向的变量的值相同,那他们共同指向的是哪个变量呢.char *b.2.7第一次调用s+=f(&a),a用的是{ int a=5; s+=f(&a); } 因为花括号的原因,a=5作用域仅限在花括号里。s=5。第二次调用s+=f(&a),是全域变量的a,Int a=2S=5+2 =7。...
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行