关于C语言程序中指针的一道选择题
有一下程序point(char*p){p+=3;}main(){charb[4]={‘a',‘b',‘c',‘d’},*p=b;point();printf(“%c\n”...
有一下程序
point(char *p){p+=3;}
main()
{
char b[4]={‘a',‘b',‘c',‘d’},*p=b;
point();
printf(“%c\n”,*p);
程序运行结果是:?
希望能得到比较详细的解释过程,本人对指针不是很懂,谢谢了,分不多,都给了。
最后漏了一个 },不好意思! 答案是 a 我就是不知道为什么,有高手给我解释下吗? 展开
point(char *p){p+=3;}
main()
{
char b[4]={‘a',‘b',‘c',‘d’},*p=b;
point();
printf(“%c\n”,*p);
程序运行结果是:?
希望能得到比较详细的解释过程,本人对指针不是很懂,谢谢了,分不多,都给了。
最后漏了一个 },不好意思! 答案是 a 我就是不知道为什么,有高手给我解释下吗? 展开
4个回答
展开全部
首先怀疑你的程序有笔误,估计你把point( p ) 写成了 point()了
这样的话,你的题目就变成这样了.
----------------------------------------------------------------------
point(char *p){p+=3;}
main()
{
char b[4]={‘a',‘b',‘c',‘d’},*p=b;
point( p );
printf(“%c\n”,*p);
程序运行结果是:?
----------------------------------------------------------------------
先简单说明一下指针:指针就是变量的地址。如char *p;这个p就是一个指针(地址)。*p就是这个地址里放的变量(字符)
这个问题的关键在point(char *p){p+=3;}这个函数,其中(char *p)的p为形参(就是形式的参数)。可以把这个函数改为point(char *tmp_p){tmp_p+=3;}结果是一样的,但是更容易理解了。
在main函数中,p=b。而b是一个数组名,b也是{‘a',‘b',‘c',‘d’}这个数组的首地址。这个首地址里放的字符就是‘a’,所以*p就是‘a’。调用point( p );后p的值没有任何变化,所以说*p是‘a’;为什么说调用point( p );后,p没有任何变化呢?
前面把point(char *p){p+=3;}改为point(char *tmp_p){tmp_p+=3;}了。
其实调用point(tmp_p);的过程是这样的:
tmp_p = p;
tmp= tmp+3;
这样可以看出变化的是tmp, p没有任何变化。所以p这个地址没有变,所以p这个地址(也就是说数组b的首地址)里放的还是‘a’。
另外,tmp_p这个变量的生存周期就是point( p )函数的执行周期。关键要明白main函数中的p和point(char *p){p+=3;}中的p不是一个指针(变量),是两个指针(变量)。在调用point( p )函数的时候把main中的p赋值给了point(char *p)中的p。
这样的话,你的题目就变成这样了.
----------------------------------------------------------------------
point(char *p){p+=3;}
main()
{
char b[4]={‘a',‘b',‘c',‘d’},*p=b;
point( p );
printf(“%c\n”,*p);
程序运行结果是:?
----------------------------------------------------------------------
先简单说明一下指针:指针就是变量的地址。如char *p;这个p就是一个指针(地址)。*p就是这个地址里放的变量(字符)
这个问题的关键在point(char *p){p+=3;}这个函数,其中(char *p)的p为形参(就是形式的参数)。可以把这个函数改为point(char *tmp_p){tmp_p+=3;}结果是一样的,但是更容易理解了。
在main函数中,p=b。而b是一个数组名,b也是{‘a',‘b',‘c',‘d’}这个数组的首地址。这个首地址里放的字符就是‘a’,所以*p就是‘a’。调用point( p );后p的值没有任何变化,所以说*p是‘a’;为什么说调用point( p );后,p没有任何变化呢?
前面把point(char *p){p+=3;}改为point(char *tmp_p){tmp_p+=3;}了。
其实调用point(tmp_p);的过程是这样的:
tmp_p = p;
tmp= tmp+3;
这样可以看出变化的是tmp, p没有任何变化。所以p这个地址没有变,所以p这个地址(也就是说数组b的首地址)里放的还是‘a’。
另外,tmp_p这个变量的生存周期就是point( p )函数的执行周期。关键要明白main函数中的p和point(char *p){p+=3;}中的p不是一个指针(变量),是两个指针(变量)。在调用point( p )函数的时候把main中的p赋值给了point(char *p)中的p。
2010-03-19
展开全部
point(char *p){p+=3;}
为p指针向下顺移寻址三位
char b[4]={‘a',‘b',‘c',‘d’},*p=b;
此时(*p)的指针值为b[0]指向b数组头位置,即当前内存状态(*p)='a',p=b;
point();应该把参数加进去,应该是pint(p);得到结果是
p+=3,即&b[0+3]=&b[3];所以当前(*p)=b[3]='d'
所以最终运行结果*p为 'd'
为p指针向下顺移寻址三位
char b[4]={‘a',‘b',‘c',‘d’},*p=b;
此时(*p)的指针值为b[0]指向b数组头位置,即当前内存状态(*p)='a',p=b;
point();应该把参数加进去,应该是pint(p);得到结果是
p+=3,即&b[0+3]=&b[3];所以当前(*p)=b[3]='d'
所以最终运行结果*p为 'd'
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
point();!!!
确定这条语句对吗!!!???应该编译不过吧
确定这条语句对吗!!!???应该编译不过吧
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
明显是d
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询