gpt4 book ai didi

c - 在屏幕上向后显示字符串

转载 作者:行者123 更新时间:2023-11-30 20:51:18 24 4
gpt4 key购买 nike

这是《Head First on C》一书中的一个小函数。此函数应在屏幕上向后显示一个字符串。

void print_reverse(char *s)
{
size_t len = strlen(s);

char *t = s + len - 1;
while ( t >= s )
{
printf("%c", *t);
t -- ;
}
puts("");
}

不幸的是,我不明白它是如何逆转的字符串。

size_t len = strlen(s);//计算数量字符串中的字符

char *t = s + len - 1;//'t'是一个指向字符类型我不明白 's' 使用什么值在这个等式中;我读过,当数组变量的名称分配给指针时,它实际上指的是地址第一个字符,即数组[0]; 's' 就是如此这里的值是 0,还是整数值某个特定角色的?

例如,单词是 s[] =“hello”。那么如果 s[0] = 'h'。添加strlen(s)s[0]应该产生 104 (十进制),因此 s + len - 1 = 104 + 6 - 1 = 109 (-1 因为我假设我必须减去 '\0'字符strlen需要考虑在内)。但 109 是 'm' 。我看不到路这个方程遍历字符串。

while (t >= s) ;我认为这意味着虽然 t不等于零,正确吗?

谢谢!

最佳答案

首先,s 是一个指针,而不是普通的 char 变量。因此,当您将字符串的内存地址分配给s时,它包含第一个位置的地址。

指针算术:通过将指针加 1,使其指向下一个内存位置。回想一下,字符串存储在连续的内存位置中。

所以,如果s指向“Hello”,

  • printf(*s) 将打印 'H'
  • printf(*(s+1)) 将打印“e”。

现在,我们在 len 中得到了长度 (=5)。当我们将 len - 1 添加到 s 时,我们使其指向前方 5 个位置。它现在指向“o”。

然后通过执行 while(t >= s) 我们比较两个指针(ts)并打印指向地址的值乘以 t 并递减它,直到它等于第一个元素 s

插图:

初始条件:

H   e   l   l   o
*s *t

现在我们打印*t并递减它。输出:o

H   e   l   l   o
*s *t

我们继续:输出:lleH

H   e   l   l   o
*s
*t

从现在开始t == s,我们停止。

关于c - 在屏幕上向后显示字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33308304/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com