i+1为什么可能会指向错误的元素
时间: 2023-12-18 17:05:06 浏览: 25
当使用i+1时,我们显式地指定了下一个需要处理的元素的索引,但是如果在循环体内删除或添加元素,可能会导致后续元素的索引发生变化,从而导致i+1指向错误的元素。比如,如果我们在循环体内删除了当前元素,那么后续元素的索引会向前移动一个位置,此时使用i+1就会指向下下一个元素,而不是下一个元素了。而如果使用i++,则会根据当前元素的位置自动更新计数器的值,从而避免了这个问题。因此,在需要在循环体内添加或删除元素的情况下,最好使用i++。
相关问题
我看过很多单步输出的例子,Y都没有指向i+1,你知道是为什么吗
在循环中,每次执行完一次循环体,控制权都会回到循环头部,检查循环条件是否满足。所以,在循环体中,我们可以通过对计数器进行自增操作,使其指向下一个需要处理的元素。这样,下一次循环时,计数器的值就是下一个需要处理的元素的索引。因此,在单步输出的例子中,如果要输出下一个元素,只需要在循环体中将计数器加1即可,不需要显式地使用i+1这种形式。
输出*(i++)为什么是先取i的内容输出后把i推后一位啊
*(i) 是 C 语言中的一种指针运算符,它用于访问指针变量指向的内存地址中的值。在这里,它是先输出指针变量指向的内存地址中的值,然后再将指针变量的值加上 1。
举个例子,如果有一个指针变量 p 指向了一个整数变量 x 的地址,那么 *(p++) 就会先输出 x 的值,然后将 p 的值加上 1,指向下一个内存地址。
这样做的目的是为了方便遍历数组中的元素。例如,如果要遍历数组 a 中的所有元素,可以使用下面的代码:
int a[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
int *p = a;
while (*p != 0) {
printf("%d ", *p);
p++;
}
在这段代码中,p 指向了数组 a 的第一个元素的地址,然后通过 *(p++) 访问并输出数组 a 中的每一个元素,直到遇到数组末尾为止。
相关推荐
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)