c/c++语言开发共享对于指针,++与+ = 1相同吗?

我想重构我的一些旧C代码,我很好奇我是否可以用ptr += 1替换所有ptr++ ,其中ptr是一些指针,而不改变任何行为。 以下是K&R第5.3节中我的意思的一个例子:

 /* strlen: return length of string s*/ int strlen(char *s) { int n; for (n = 0; *s != ''; s++) n++; return n; } 

当我用s += 1替换s++时,我得到了相同的结果,但我想知道所有类型是否都是这种情况。 我也对int进行了测试:

 int size = 10; int *int_array = (int*)calloc(size, sizeof(int)); for (int i = 0; i < size; i++) int_array[i] = i; for (int i = 0; i < size; i++) { printf("*int_array = %dn", i, *int_array); int_array++; } 

如果我替换行int_array++; 使用int_array += 1; ,我得到了相同的结果。

在考虑了这个之后,我意识到如果在表达式中使用该值可能会出现问题。 是否更安全我只是将增量移动到另一条线上,如下所示:

 int a = 5; int b = a++; 

会成为:

 int a = 5; int b = a; a += 1; 

结论

我认为可能是一个问题,增加不同类型的指针,不是一个问题。 请参阅@ bdonlan的回复原因。

这并不意味着您可以用x += 1替换所有x++并期望相同的行为。 但是,您可以安全地将++x替换为(x += 1) ,因为它们是等效的。

    a += 1相当于++a (C99§6.5.3.1/ 2)。 在像int b = a++;这样的行中int b = a++; 这意味着它等同于a++ ; a++将返回a的值,而a += 1返回新值。

    请注意,如果您不使用a++的结果(即,您的语句只a++; ),那么它们实际上是相同的。

    另请注意,_all指针算法以指向类型的大小(§6.5.6/ 8)为增量进行。 这意味着:

     ptr = ptr + x; 

    相当于:

     ptr = (ptr_type *)( (char *)ptr + x * sizeof(*ptr) ); 

    无论你使用++++=还是[]p[x]完全等同于*(p + x)都是一样的;你甚至可以做4["Hello"]这样的事情因为这个) 。

    ++--是根据内置类型的算术定义的。 除了postfix返回旧值之外,行为将是相同的。

    这是一个很好的问题。 答案是肯定的,您可以这样做 – 无论您如何操作,增加指针会将sizeof(the type that the pointer points to)指针指向sizeof(the type that the pointer points to)到指针。 正如其他答案所表明的那样,你需要注意不要依赖增量何时发生,即++和++ a有不同的效果,但最终会得到相同的值。

    问题是: 为什么要将所有代码从a++更改a+=1 ? 使用带有指针的后增量运算符是任何C程序员都应该很容易理解的,因此很难理解为什么要进行这种更改。

      以上就是c/c++开发分享对于指针,++与+ = 1相同吗?相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注(计算机技术网)。

      本文来自网络收集,不代表计算机技术网立场,如涉及侵权请点击右边联系管理员删除。

      如若转载,请注明出处:https://www.ctvol.com/c-cdevelopment/545669.html

      (0)
      上一篇 2021年1月10日
      下一篇 2021年1月10日

      精彩推荐