gpt4 book ai didi

c - 如何计算 (int*) % int ?

转载 作者:行者123 更新时间:2023-11-30 21:14:06 25 4
gpt4 key购买 nike

我正在实现一个循环队列,当队列已满时,我希望指针返回到数组地址的第一个。

struct Sample{

void* ptr;
};

int main() {

char a[20] = "hello";

struct Sample sample;

sample.ptr = (a + 2) % 6;

printf("%s\n", sample.ptr);

}

当我编译代码时,出现以下错误:

invalid operands to binary % (have ’char* ’ and ‘int’)

我知道问题出在 % ,例如,如果我将第 12 行更改为 sample.ptr = (a + 2) 它将起作用。但我需要评估%。我怎样才能做到这一点?

最佳答案

sample.ptr = (a + 2) % 6;

a 是一个 char* (即内存地址),向其添加 2 即可 - 这将进一步指向 2 个 chars内存。

但是执行%(模数)(即使它有效)当然会创建一个无效的指针。

sample.ptr 将指向内存地址 0 到 5 的某个位置(0 是 NULL 指针),这可能不是您想要的。

更新:

I am implementing a circular queue, when the queue is full, I want that the pointer return to first of array address

要实现循环队列,您可以使用:

sample.ptr = a + (pos % number_of_items_in_array); // brackets not really needed

或者:

sample.ptr = &a[pos % number_of_items_in_array];

sample.ptr 也应该是 char*,而不是 void*:

struct Sample{
char* ptr;
};

关于c - 如何计算 (int*) % int ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34791370/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com