回 帖 发 新 帖 刷新版面

主题:帮我解释下

#include <stdio.h>
#include <stdlib.h>
struct st {
    char c;
    char s[80];
    
};char *f(struct st t);
int main(int argc, char *argv[])
{




    int k;
    struct st a[4]=
    {{'1',"123"},{'2',"321"},{'3',"123"},{'4',"321"}};
    for (k=0;k<4;k++)
    printf("%s\n",f(a[k]));
    
  system("PAUSE");    
  return 0;
    
}
char * f(struct st t)
{
    int k=0;
    while (t.s[k]!='\0'){
        if (t.s[k]==t.c)return t.s+k;  //就这条语句 return 后面的什么意思?
        k++;
    }
    return t.s;
}

这是一题2级考试题目 输出结果是 123 21 3 321 但是不知道第一个 return t.s+k 什么意思?
 还有 这个程序打入 编译器里 输出是乱码 但是把a[80]改成a[300]就和答案一样了 为什么?   a[80]不是只给个空间么?

回复列表 (共2个回复)

沙发

这个程序的意思是是这样:若字符串s中与有与字符c相同的字符,则从相同的地方开始把字符串剩余部分全打印出来,若没有,则打印整个字符串
如:c='5' s="123456",则只打出"56"
t.s+k 指的是t.s[k]的地址,t.s指的是s的首地址,k是偏移量

板凳

知道了 谢谢

我来回复

您尚未登录,请登录后再回复。点此登录或注册