鱼C论坛

 找回密码
 立即注册
查看: 5032|回复: 8

就想问一下为什么那个return (p-s)等于8

[复制链接]
发表于 2012-7-3 19:21:08 | 显示全部楼层 |阅读模式
3鱼币
#include <iostream>
using namespace std;
int f(char *s)
{
char *p=s;
while(*p!='\0'){p++;cout<<p<<endl;}
cout<<(p-s)<<endl<<s<<endl;
return (p-s);
}
int main()
{  cout<<f("goodbey!");
    return 0;
}
求助呀。。。。。。。

小甲鱼最新课程 -> https://ilovefishc.com
发表于 2012-7-3 19:27:06 | 显示全部楼层
直接来问我不久得了啊,s是字符串的首地址,也就是g,g 的代码是103,p++指向了o,o的代码是111,用111-103,如果我数学还可以的话,应该是等于8、、、、
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2012-7-3 19:57:14 | 显示全部楼层
char *p=s;
指针p指向"goodbey!"里的字符'g'
while(*p!='\0'){...}
我们知道,如果这个循环退出的话,一定有*p!='\0'不成立,也就是说循环结束时*p=='\0'成立
也就是说p指向"goodbey!"最后的字符'\0'
接下来的算术不是我的强项,我经常算错,LZ自己算
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2012-7-3 22:57:53 | 显示全部楼层
2L的说法我觉得完全不正确吧?
s是字符串的首地址,但是他不是g啊,他只是指向g,他自己只是个地址而已,不是103.
之所以p-s=8是因为你while循环中每次循环都增加p所指向的地址,而p是char类型的
每个char类型占用一个字节,每次p++,p会+1,到最后的时候p和s已经拉开8个字节了,所以
p-s才等于8吧
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2012-7-4 04:10:06 | 显示全部楼层
2楼的解释果断hold住全场,牛x。。不解释
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2012-7-4 08:29:00 | 显示全部楼层
各位楼主意见不大一样啊!!
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2012-7-4 09:01:02 | 显示全部楼层
2L牛X。。。。。。。
p是尾指针  s也是头指针
p - s  指针做算术运算。。  指针类型是char
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2012-7-5 11:09:02 | 显示全部楼层
3楼说的是对的!
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2012-7-13 20:19:38 | 显示全部楼层
返回的是长度吧,把字符串弄长一点看看,返回多少
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-11-14 01:00

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表