繁体   English   中英

这两个使用“ptr[i]”和“*(ptr+i)”的排序函数有什么区别?

[英]What is the difference between these two sorting functions using "ptr[i]" and "*(ptr+i)"?

void sort(int *ptr, int n) {
    int i,j,tmp;
    for (i=0;i<n;i++)
        for (j=i;j<n;j++)
                if (ptr[i] > ptr[j])
                {
                    tmp=ptr[i];
                    ptr[i]=ptr[j];
                    ptr[j]=tmp;
                }
}

void sort(int *ptr, int n) {
    int i,j,tmp;
    for (i=0;i<n;i++)
        for (j=i;j<n;j++)
                if (*(ptr+i) > *(ptr+j))
                {
                    tmp=*(ptr+i);
                    *(ptr + i) = *(ptr + j);
                    *(ptr + j)=tmp;
                }
}

它具有相同的输出。 两者都有效。 我见过有人同时使用两者,尽管显然第一个看起来比第二个更自然和直观。 使用第一个而不是第二个有什么问题吗? 另外,如果有的话,它们之间的主要区别是什么?

这两段代码在语义上是等价的。

关于数组下标运算符[]C 标准第 6.5.2.1p2 节指出:

后缀表达式后跟方括号[]的表达式是数组对象元素的下标指定。 下标运算符[]的定义是E1[E2](*((E1)+(E2))) 由于适用于二元+运算符的转换规则,如果E 1 是数组对象(相当于指向数组对象初始元素的指针)并且E2是整数,则E1[E2]指定第E2个元素E1 (从零开始计数)。

因此,例如ptr[i]*(ptr+i)以及其他类似实例完全相同。

使用数组下标的代码的第一个版本通常是首选,因为它更具可读性。

没有。 这只是风格问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM