关于C语言指针的几个问题

来源:百度知道 编辑:UC知道 时间:2024/05/25 02:48:58
一 程序输出结果:
1 #include "stdio.h"
main()
{ printf("%d\n",NULL); }
A.因变量无定义输出不定值 B. 0 C. -1 D. 1
<答案是不是选B?NULL的代码值是0>

2. void sub(float x,float *y,float *z)
{ *y=*y-1.0;
*z=*z+x;
}
main()
{ float a=2.5,b=9.0,*pa,*pb;
pa=&a; pb=&b;
sub(b-a,pa,pa);
printf("%f\n",a);
}
A. 9.000000 B. 1.500000 C. 8.000000 D. 10.500000
< 被调函数sub执行后,*y=1.5,*z=9.0,可是返回调用函数时都是pa,那么*pa该取哪一个值呀?>

二 a[0] a[1] a[2] a[3] a[4]
10 20 30 40 50

1.指针s已指向存储单元a[2],不移动指针s,通过s引用存储单元a[3]的表达式是---?
<我做的答案是 &(*s+10) 对吗?>

2.若指针p指向存储单元a[0],则以下语句的输出结果是---?
for(i=0;i<5;i++) printf("%d ",*(p+i));
printf("\n");
< i=3,4的时候,p就指向空了,这时候输出的结果难道是'\0'吗?
还有,我猜也许有用,原题中 printf() 里

1、回答正确!答案是B
2、首先注意指针变量传递的是地址!sub函数里,y、z均指向a,所以共同改变a的值。*y=*y-1.0; 执行后,a=*pa=*y=*z=1.5。*z=*z+x;执行后,*z=*pa=a=1.5+6.5=8,所以答案是C. 8.000000
二-1、错误!因为s已经指向了a[2]的地址,而a[2]的下一个地址就是a[3],所以s+1就指向了a[3]的地址,*(s+1)取a[3]的值。
二、-2、p并不指向空!首先,数组a共有五个元素,而此时指针p指向首地址,for循环一共循环了5次,所以输出结果是10 20 30 40 50。因为指针用的是*(p+i),所以运行完成后,p并没有移动(注意不是*(p++)),依然指向数组a的首地址。
关于指针,建议你看一下“初学者编程入门:C语言指针使用方法”,非常容易理解!而且有很多技巧在里面。
地址:http://www.souzz.net/html/edu/C1/3878.html
或者从百度里搜一下。