• 已解决 73482 个问题
  • 已帮助 5993 位优秀工程师

C语言指针操作的疑惑?

今生 2019-05-27 浏览量:806
            while( u32IdxL > (uint32)0 )
            {
                // polyspace<RTE:IDP> There is no way to avoid this both arrays and the count are not related from PolySpace point of view.
                (*pu8DestBufL) = (*pu8SrcBufL);
                pu8DestBufL = &pu8DestBufL[1];
                pu8SrcBufL  = &pu8SrcBufL[1];
                --u32IdxL;

            }


            while( u32IdxL > (uint32)0 )
            {
                // polyspace<RTE:IDP> There is no way to avoid this both arrays and the count are not related from PolySpace point of view.
                (*pu8DestBufL) = (*pu8SrcBufL);
                pu8DestBufL++;
                pu8SrcBufL++;
                --u32IdxL;
            }


两个代码段有区别吗?

0 0 收起

我来回答

上传资料:
选择文件 文件大小不超过15M(格式支持:doc、ppt、xls、pdf、zip、rar、txt)
所有亮答 数量:6
  • 没有本质的区别,只是指针移动的方式不一样而已。

    如果指针都正确定义了,最终效果完全一样。

    效率上可能有一些差别,因为pu8DestBufL = &pu8DestBufL[1] ; 比较间接,会有多余的动作。

  • 执行结果是一样的,但是下面的执行效率高,直接指针操作,上面的需要通过读取数组内容再转换地址比较耗时间

  • 执行结果完全相同,但第二种写法方便编译器使用处理器的 后加指令 优化代码,执行效率高。另外从阅读角度看,第一种写法要分析逻辑关系才能知道它的功能,第二种一看就知道功能,明显第二种写法更易于后期维护。

  • 看了大家的感觉都是第二种好,可第二中是我写的,第一种是别人写的,不明白其中道理,为什么要这么写?
apleilx 回复了 今生:你也可以直接写成 (*pu8DestBufL++) = (*pu8SrcBufL++); 别人写的东西未必就是最优的。 回复
今生 回复了 今生:谢谢,但看到几处都是这么写的,而且写这个程序的是经过实践多次改版的结果,就有点怀疑自己了。 回复

  • 实现的功能是一样的,不过第二种方法要简单一点,第一种方法需要用到两次取地址的操作,第二种不用,第二种方法的执行效率也高

  • 功能完全一样,其实有本书叫 数组与指针,就是专门讲这个问题

相关问题

问题达人换一批

C语言指针操作的疑惑?