C ++内存地址增量

时间:2012-10-30 04:32:20

标签: c++ sockets memory byte send

有没有办法让我获取一个内存地址并将其提前一个存储在变量中的数量?那变量类型必须是什么?

例如,在下面的代码中,我首先要查看数据+ 0,然后查看数据+发送后的每一步。如果我正确地看这个,发送存储为字节,数据是存储器地址。

bool sendAll(int socket, const void *data, ssize_t size) {
    ssize_t sent = 0;
    ssize_t just_sent;
    while (sent < size) {
        just_sent = send(socket, data + sent, size - sent, 0);
        if (just_sent < 0) {
            return false;
        }
        sent += just_sent;
    }
    return true;
}

2 个答案:

答案 0 :(得分:3)

这就是char*将要做的事情。当指针具有类型T*时,指针数学始终适用于sizeof (T)的增量。根据定义sizeof (char) == 1

所以试试:

just_sent = send(socket, sent + (const char*)data, size - sent, 0);

答案 1 :(得分:2)

只是补充@ Ben的回答,因为我认为“只需用我答案中的版本替换一行调用send。”不是一个非常好的答案...

@Rick,重要的是你知道传输了多少字节。无论数组是否为整数数组,如果您想从sent - 字节开始,您可以将data强制转换为(char*),以便编译器在(char*)data + sent上添加sent个字节到data进行正确的指针算术运算。那是因为sizeof(char) == 1字节。相反,如果您将data转换为(int*),而不是转移sent个字节,则会转换sent * sizeof(int)个字节。