简单的c++问题

kiddkyd 2009-05-19 08:44:42

#include "stdafx.h"
#include <iostream>
using namespace std;

int f(char *s)
{
char *p=s;
while(*p!='\0')p++;
return(p-s);
}
void main()
{

cout<<f("good")<<endl;
}


不明白为什么越循环p越短,从"good"变到"",既然是没了,为什么减去s还可以等于一个正数呢?
...全文
83 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
pengzhixi 2009-05-19
  • 打赏
  • 举报
回复
这是指针之间的算术运算,两个指针之间的运算结果可为正,可为负数.
kiddkyd 2009-05-19
  • 打赏
  • 举报
回复
4楼的%d好像用错,,,我是帮人问的..没学过c++....
xiaoshi935 2009-05-19
  • 打赏
  • 举报
回复
根本上来说,是随着p的自增,内存地址不断增大,所以最后返回的是这个字符串的长度
majun01 2009-05-19
  • 打赏
  • 举报
回复
指针问题。

为什么减去s还可以等于一个正数呢?
因为:起初p=s,然后p一直增加,在p-s时当然是正数,就像a=b=3,然后a一直在进行a++操作,在a-b时就是正数了。

为什么越循环p越短,从"good"变到""
因为:p指向的是一个语句即"good",在p++之后,p向后移动一位,p原来指向字母‘g’,移动
一位后指向字母‘o’,即p指向的语句变为:“ood”,变短了。因为有循环且
一直执行p++,所以越循环p越短,从"good"变到""。
xiaoshi935 2009-05-19
  • 打赏
  • 举报
回复

#include <iostream>
using namespace std;

int f(char *s)
{
char *p=s;
while(*p!='\0')p++; //p循环到字符串末
printf("%d\n",p); //输出p的地址
printf("%d\n",s); //输出s的地址
return(p-s); //返回地址之差
}
void main()
{

cout<<f("food")<<endl;
}

上面这段代码估计可以让你理解,其实这个问题很简单的。呵呵
lypdaydayup 2009-05-19
  • 打赏
  • 举报
回复
呵呵 好好推就理解了~~~
  • 打赏
  • 举报
回复
你完全不知道涩会那么是指针吗?

int f(char *s)
{
char *p=s; //p记录常量区数据"good"的首地址
while(*p!='\0')p++; //遍历到该数据尾
return(p-s); //返回该字符串长
}
void main()
{

cout<<f("good")<<endl;
}
lingyin55 2009-05-19
  • 打赏
  • 举报
回复
既然是没了,为什么减去s还可以等于一个正数呢?

while(*p!='\0')p++;////指针值一直在增加
return(p-s);///从0开始增加

65,211

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧