c++ - 为什么指针运算在这里不起作用?

标签 c++ c arrays algorithm pointers

<分区>

在下面的程序中

#include <iostream>

bool contains ( int * sarr, size_t n, int i ) // checks whether the integer i is in the sorted array sarr of length n
{ 

    int * pa = sarr; int * pb = sarr + n;
    if (pa == pb) return false; // empty array
    --pb;
    while (pa != pb)
    {
        if (*pa == i || *pb == i) return true;
        int * pc = (pa + pb)/2;
        if (*pc < i)
            pa = pc;
        else 
            pb = pc;
    }
    if (*pa == i || *pb == i)
       return true;
    else 
       return false;
}


int main () 
{
    int arr [] = {1, 1, 6, 10, 19, 22, 22, 22, 50};
    std::cout << contains(arr, sizeof(arr)/sizeof(int), 6); // should print 1
    return 0;
} 

编译器出错

error: invalid operands of types 'int*' and 'int*' to binary 'operator+'

在线

int * pc = (pa + pb)/2;

这是为什么呢?我认为添加指针是完全有效的。或者我需要在右侧进行一些石膏固定吗?

如何在继续涵盖所有极端情况的同时使该算法更加紧凑和高效?

此外,我将其标记为 C 和 C++,因为它是 C 风格的 C++。

最佳答案

添加指针无效。将整数值添加到指针(偏移量)是有效的。您可以使用 (pb - pa)/2 + pa 来解决这个问题。减去指针得到范围的大小。

关于c++ - 为什么指针运算在这里不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30426800/

相关文章:

c++ - 如果没有插入而只有 .find(),在多线程上使用 C++ STL 容器是否安全?

C++链表求和问题

c - 无法在C程序中输入带空格的名称?

c - 写入h_addr_list

C - 在终端中创建动画 - 自动更新二维数组

java - 动态使用名称与其他数组中的值匹配的数组

c++ - QPushbutton 中可能存在错误?

c++ - 转换一串整数的最有效方法是什么,例如(1,5,73,2) 成一个整数数组?

jquery - 水平(在表格中)而不是垂直列出数据

php - 两行按时间顺序排序