将“-=”运算符与C中的数组元素一起使用

问题描述 投票:0回答:3

下面的代码从字符串中删除了第7个字符,但我无法弄清楚,但有人可以向我阐明数组和S1[6] -= S1[6];等操作的一般逻辑。我搜索了数组算术,但它与地址算术和指针有关。感谢您的帮助。

#include <string.h>

int main()   
{ 
   char S1[]= "Hello World";   
   S1[6] -= S1[6];
   printf("%s",S1);
}
c arrays string operators arithmetic-expressions
3个回答
1
投票
S1[6] -= S1[6];

等于

S1[6] = S1[6] - S1[6];

也等同于

S1[6] = 0;

或更好的上下文

S1[6] = '\0';

S1[6],将数组7的第S1个元素与'W'字符的值相减,其结果实际上是0,被分配回第7个数组元素。

[尽管第7个元素之后的所有字符都不会被覆盖/擦除,但它使字符串的第7个元素为空字符,该字符终止了字符串。

这会导致程序的输出将是"Hello "而不是"Hello World"


2
投票

声明

 S1[6] -= S1[6];

可以读为

S1[6] = S1[6] - S1[6];

因此,基本上,它减去数组实例本身的值,从而得出第七。元素为0。

但是,这不会更改数组中任何其他元素的值(不像您提到的“第7个字符及以后的字符..”),它只是将第7个元素的值设为0,即终止string

的空字符。因此,在修改之后,当您将数组传递给需要字符串的函数时,最多空终止符仅为visible

0
投票

作为这行代码S1 [6]-= S1 [6];将产生零,因此当您执行代码以打印问候字串时,它将从头开始打印,直到空终止符为止,因此仅打印前5个字符

© www.soinside.com 2019 - 2024. All rights reserved.