读书人

一道C语言指针题目!

发布时间: 2012-03-16 16:34:56 作者: rapoo

一道C语言指针题目!!!高手指点~~~
#include<stdio.h>
int *p;
main()
{
int a=1,b=2,c=3;
p=&b;
pp(a+c,&b);
printf("(1) %d %d %d\n",a,b,*p);
}
pp(int a,int *b)
{
int c=4;
*p =*b+c;
a=*p-c;
printf("(2) %d %d %d\n",a,*b,*p);
}
结果是: (2) 2 6 6
(1) 1 6 6
想问的是(2)这组中的(*b)为什么会是6?是因为b的地址所指向的内容因为
*p =*b+c;这句的关系一起改变了吗?最后导致回到main()函数后b也变成了6
是这样理解的吗?





[解决办法]
p=&b;


以后p指向的位置就变成了b的内存所在的位置了。

*p =*b+c;
这个语句改变了p指向的内存的位置的值。

所以就都改变了。。
[解决办法]
你就理解基本上是对的。
[解决办法]
#include <stdio.h>
#include <stdlib.h>
int *p;
void pp(int a,int *b);
int main()
{
int a=1,b=2,c=3;
p=&b;
pp(a+c,&b);
printf("(1) %d %d %d\n",a,b,*p);//a==1,b==6,*p==6
system("pause");
return 0;
}
void pp(int a,int *b)
{
int c=4;
*p =*b+c;//*p==*b==6
a=*p-c;//a==6-4
printf("(2) %d %d %d\n",a,*b,*p);//2 6 6
}
[解决办法]

[解决办法]
因为指针变量p所指向的是b的内存地址,
6==*p,所以6==b
不知可否这样理解?

读书人网 >C语言

热点推荐