C 将两点中的哪一点与数组中的两个条目进行比较有意义吗?
在C语言中,我有一个数组C 将两点中的哪一点与数组中的两个条目进行比较有意义吗?,c,C,在C语言中,我有一个数组inta[20]。我有两个指针int*pi和int*pj分别指向两个条目A[I]和A[j]。我不知道I和j。我想知道I>j或j当且仅当pi>pj,以及I==j当且仅当pi==pj?谢谢 是的,这是一个有效的比较。如果 pi = &A[i] = A + i 及 那是真的 (pi < pj) == (i < j) (pi
inta[20]
。我有两个指针int*pi
和int*pj
分别指向两个条目A[I]
和A[j]
。我不知道I
和j
。我想知道I>j
或j
当且仅当pi>pj
,以及I==j
当且仅当pi==pj
?谢谢 是的,这是一个有效的比较。如果
pi = &A[i] = A + i
及
那是真的
(pi < pj) == (i < j)
(pi
是的,这是一个有效的比较。如果
pi = &A[i] = A + i
及
那是真的
(pi < pj) == (i < j)
(pi
是的,指针上的
运算符定义为以这种方式工作
对于不指向同一对象或刚过其末端的指针,
的行为是未定义的<代码>=和=但是,代码>定义良好
参考:6.5.8,第5段:
比较两个指针时,结果取决于相对值
指向的对象的地址空间中的位置。如果两个
指向对象类型的指针都指向同一对象,或者都指向
超过同一数组对象的最后一个元素一次,它们进行比较
相同的如果指向的对象是同一聚合的成员
对象,指向稍后声明的结构成员的指针
而不是指向结构中前面声明的成员的指针,以及
指向具有较大下标值的数组元素的指针比较
大于指向同一数组中具有较低
下标值。指向同一联合对象成员的所有指针
比较平等。如果表达式P
指向
数组对象和表达式Q
指向
同一数组对象,指针表达式Q+1比较
大于
P
。在所有其他情况下,行为是未定义的
是的,指针上的
运算符就是这样定义的
对于不指向同一对象或刚过其末端的指针,
的行为是未定义的<代码>=和=但是,代码>定义良好
参考:6.5.8,第5段:
比较两个指针时,结果取决于相对值
指向的对象的地址空间中的位置。如果两个
指向对象类型的指针都指向同一对象,或者都指向
超过同一数组对象的最后一个元素一次,它们进行比较
相同的如果指向的对象是同一聚合的成员
对象,指向稍后声明的结构成员的指针
而不是指向结构中前面声明的成员的指针,以及
指向具有较大下标值的数组元素的指针比较
大于指向同一数组中具有较低
下标值。指向同一联合对象成员的所有指针
比较平等。如果表达式P
指向
数组对象和表达式Q
指向
同一数组对象,指针表达式Q+1比较
大于
P
。在所有其他情况下,行为是未定义的
是的,当然,我希望你们知道。是的,这是有效的,因为这就是编译器如何使用A[I]
到*(A+I)
,所以数组得到这样的分配。指针体操在C中很常见,只要知道你们所指类型的大小:)是的,当然,我希望你们知道。是的,有效,因为这就是编译器使用A[i]
来*(A+i)
的方式,所以数组得到这样的分配,请注意您所指类型的大小:)我认为您希望在上一个语句中使用等效而不是等效。在本例中,等效源于等效,它通过颠倒I
和j
@FilipeGonçalves的角色,你的区别是什么?@Felipe我们在这里专门讨论C编程语言,其中表达式x
既有逻辑意义,又有数值。@JeremyWest-Fair,我明白你的意思。没关系,我只是吹毛求疵:P,但是的,在C上下文中它是有意义的。我想你想在上一个语句中使用等价而不是等价。等价是从等价开始的,在这个例子中,等价是通过颠倒I
和j
@FilipeGonçalves的角色,你的区别是什么?@Felipe我们在这里专门讨论C编程语言,其中表达式x
既有逻辑意义,又有数值。@JeremyWest-Fair,我明白你的意思。没关系,我只是吹毛求疵:P,但是的,在C上下文中是有意义的。在“增加内存地址”中也定义了数组分配(我的意思是在C标准中)?我认为是的,因为编译器将A[I]
视为*(A+I)
。@GrijeshChauhan是的。”==并且“增加内存地址”中的数组分配也被定义了(我的意思是在C标准中)?我认为是的,因为编译器将A[I]
视为*(A+I)
。@GrijeshChauhan是的,是的。”==和