赞
踩
下面两个函数都是想把数组arr的第三号元素“4”往后挪一位,区别仅在于for循环中的语句不一样:
- void f1()
- {
- int arr[5] = { 1, 2, 4};
- int *p = &(arr[2]);
- for (; p >= &arr[2]; p--)
- {
- *(p++) = *p;
- }
- }
-
- void f2()
- {
- int arr[5] = { 1, 2, 4};
- int *p = &(arr[2]);
- for (; p >= &arr[2]; p--)
- {
- *(p+1) = *p;
- }
- }

函数f1会死循环,因为for循环中的p值加了1,而for中的第三个表达式又会将p减1,这就导致p一直指向arr[2];
而函数f2不会死循环,因为for中的p没有被赋值。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。