
[英]Difference between printf(“%c”,*(*(ptr+i)+x)) and printf(“%s”,*(*(ptr+i)+x))
[英]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.