vitalfish 发表于 2022-7-21 17:13:05

带你学C带你飞,数组与指针课后作业一题不懂这个解释,好难理解

{:5_90:}
题目来自   ——>带你学C带你飞 S1E22 练习0进阶

答案是这个代码,小甲鱼的解释是这样的:
不难发现,每个中文字符在我们的系统中是占用 4 个字节的存储空间,并且都是负数。以此规律,我们只要检测一个字符对应的整型值是否为负数,如果是(中文字符),则将指针往后移动两个字节
详细在图片里
我不懂了,不应该是4个字节吗,怎么是两个字节。麻烦懂的帮我解释一下喔,最好画个图,本人比较笨QWQ


#include <stdio.h>

#define MAX 1024

int main()
{
      char str;
      char *target = str;
      char ch;
      int length = 0;

      printf("请输入一个字符串:");
      fgets(str, MAX, stdin);

      while (1)
      {
                ch = *target++;
                if (ch == '\0')
                {
                        break;
                }
                if ((int)ch < 0)
                {
                        target += 2;
                }
                length++;
      }

      printf("您总共输入了 %d 个字符!\n", length - 1);

      return 0;
}

henkuderen 发表于 2022-9-5 16:55:38

https://fishc.com.cn/thread-147048-1-1.html
可以先看下这个帖子。

vitalfish 发表于 2022-9-5 22:49:10

大佬,nb

水边的小姑娘 发表于 2022-9-6 08:36:49

我觉得进阶要求的代码可以稍微做一点修改
if ((int)ch < 0)
{
        ++target;
}
length++;
这样只要ch<0,target就加1,无需考虑汉字占几个字节

水边的小姑娘 发表于 2022-9-6 09:04:10

水边的小姑娘 发表于 2022-9-6 08:36
我觉得进阶要求的代码可以稍微做一点修改

这样只要ch

后面的两次赋值也换成一次
页: [1]
查看完整版本: 带你学C带你飞,数组与指针课后作业一题不懂这个解释,好难理解