一道简单的编程题

[复制链接]
查看11 | 回复2 | 2009-1-31 17:36:08 | 显示全部楼层 |阅读模式
下列程序的功能是:把S字符串中的所有字符左移一个位置,串中的第一个字符移到最后.请编写函数CHG(CHAR *S)实现程序要求,最后调用函数READWRITEDAT()把结果输出到OUT.DAT文件中.
例如:S字符串中原有内容为:Mn.123xyZ,则调用函数后,结果为:n.123xyZM.
void chg(char*s) /*标准答案*/
{int I,strl;
char ch;
strl=strlen(s);
ch=*s;
for(I=0;I<strl-1;I++)
*(s+I)=*(s+I+1);
*(s+strl-1)=ch;
}
在这里我想问s不是指向char型的指针么,怎么有strlen呢?
或者说原来s是一字符串,不过以传址形式传到该函数,这样的话ch又是char型,怎么又有*(s+strl-1)=ch?ch,s都是char型,怎么一边是指针一边是值呢?总之有点乱,谁能给解释一下呢?

回复

使用道具 举报

千问 | 2009-1-31 17:36:08 | 显示全部楼层
strlen是一个函数,参数是char *类型的,算出它指向的字符串的长度,*(s+strl-1)则是该字符串中的一个字符,*就是取指针指向单元中的元素...
回复

使用道具 举报

千问 | 2009-1-31 17:36:08 | 显示全部楼层
strlen接受的本来就是char **操作符,接受的是一个XXX *类型的值,注意是值。char *类型的值不是必须通过直接写char *类型变量获得的 s+strl-1 这个表达式的类型还是char *类型的 是一个指向s后 strl - 1个字节位置的指针...
回复

使用道具 举报

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

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行