三个简单C语言题:

来源:百度知道 编辑:UC知道 时间:2024/05/04 07:32:15
1:
int *p,a=10,b=20;
p=&a;
p=&b;
printf ("%d %d",*p,*p)

2:
char *p="ABC"
printf ("%d",strlen(p)+*p);

3:
int a[]={1,2,3},*b[2];
b[0]=a+1,b[1]=a+2;
printf ("%d %d",*b[0],*b[1]);

请输出以上3个题目的结果!并说明原因谢谢!

1.
原因:p先指向a的地址,p又指向b的地址,即此时p指向b的地址
再两次输出p所指向的b的值
20 20
2.
原因:输出p指向的字符串的长度3+p所指的地址的字符‘A’(ASCII码为65)
68
3.
原因:b为指针数组,b[0]指向a+1(a[1]),b[1]指向a+2(a[2])。
2 3

1、p是个指针,所指对象可以改变,但是,同一时刻只能指向一个对象
这里,先指向a,而后又指向b,那么*p的值就是b的值,20
2、strlen(p)返回的是p所指字符串的长度,这里是3,然后*p返回字符A,中间用加号,结果是A的ascii码值+3
3、b数组存储的是int型指针,a数组的数组名可以当指针用,指向数组的第一个元素,也就是1,那么a+1指向2,a+2指向3,通过赋值后,*b[0]位2,*b[1]为3

1.
结果:20 20.
a,b的地址先后都赋给了p.p最终指向了b(后赋值).所以两个值都是b的值.
2.
结果:68.
*p就是字符串的第一个字母的值(A),其ASCII的值为65.再加strlen(p)的值3,就是68.
3.
结果:2 3
int *b[2]是定义了一个指针数组.
b[0]=a+1,b[1]=a+2;就是将a[1]的地址赋给b[0],a[2]的地址赋给了b[1];
因此打印出来的就是a[2],a[3]的值了.

第一个是 20,20
因为p是个指针啊
最后把b的地址赋给指针p了啊
所以最后就是b的值啊

第二个 68

第三个 2,3
因为b[0]是a的地址向后推一位啊 ,b[1]是向后推2位啊

第一题很简单
答案是20 20.
p是指针变量,指向b,所以是20
第二题学的时间长了,不会了
第三题应该是2,3吧