初学C语言帮忙细讲一下此题xiexie

来源:百度知道 编辑:UC知道 时间:2024/07/06 15:40:52
最好把指针部分好好讲一下
main
{int a,b,k,m=6,*p1=&k,*p2=&m;
a=p1==&m;
b=(*p1)/(*p2)+7;
printf("a=%d\n",a);
printf("b=%d\n",b;}

说实话,我真的服了!!!一楼和二楼的,你们不要误人子弟好不好!!!搞笑!!!
main
{
int a,b,k,m=6,*p1=&k,*p2=&m;
a=p1==&m;
b=(*p1)/(*p2)+7;
printf("a=%d\n",a);
printf("b=%d\n",b;
}
其中:
a=p1==&m;
/*这句完全没有问题!!意思是判断指针p1的内容是不是m的地址(p2)(至于为什么要这么判断,那是人家的算法的问题),然后将结果赋值给a.其实等效为以下的语句:
if(p1==&m)
a=1;
else a=0;
*/

int a,b,k,m=6此句中定义了a,b,k,m四个变量,并为m赋值为6,int *p1=&k,int *p2=&m定义两个指针,并将地址分别初始化为k和m的地址,a=p1==&m此句有问题,p1为指针,不可以复制给int型变量a,b=(*p1)/(*p2)+7中的*p1和*p2分别相当于k与m的值

一楼误人子弟啊
int *p1=&k;
int *p2=&m;
是说指针p1指向的地址中存储变量k的地址指针p2指向的地址中存储变量m的地址,
不过看楼主的本意,这里应该是写错了
应该为
int *p1 = k;
int *p2 = m;
a=p1==&m;确实有问题,如a中存地址也应为a=p1=&m,不应两个等号,在本题中p1==&m是不可能正确的,因为p1的地址值和变量m的地址不可能相同啊,如p1=&m;倒还可以。

说的很对,但这句是没有意义的,楼主应该是写错了,不过你的回答确实提醒了我,这点谢谢你。

定义a,b,k,m为变量, p1,p2为指针, 初始化p1指向k, p2指向m.
a=p1==&m;相当于a=(p1==&m); 首先判断p1是否指向m,如果是,则将1赋给a,否则将0赋给a, 因此,此处a应为0.<