【发布时间】:2019-05-25 07:46:58
【问题描述】:
我想使用 c++ 中的结构创建一个循环缓冲区。基本实现。我在将元素插入缓冲区时遇到问题。这是我写的代码。
这是我的结构定义:
#define LENGTH_BUFFER 100
typedef struct {
int buffer[LENGTH_BUFFER];
int head;
int tail;
} ringbuffer;
ringbuffer test;
初始化设置指针为0:
void RingBuffer_Init(ringbuffer temp)
{
temp.head = 0;
temp.tail = 0;
}
数据推送功能:
void RingBuffer_Push(int data,ringbuffer temp)
{
temp.buffer[temp.head] = data;
temp.head++;
}
这里是我调用函数来初始化和推送数据的地方
void main()
{
RingBuffer_Init(test);
RingBuffer_Push(25,test);
cout << test.buffer[0]<<endl;
}
我似乎无法将数据推送到我的缓冲区。请帮帮我。它返回全零。
【问题讨论】:
-
欢迎来到 Stack Overflow!请使用tour 并阅读How to Ask,作为新用户的指南。关于您的代码,
LENGTH_BUFFER是未定义的,typedef struct ...在 C++ 中是不必要的,并且整个代码的格式并不是一致的,这使得阅读和理解变得困难。此外,“我似乎不能”是一种解释,但您缺乏引导您做出这种解释的实际观察结果。 -
RingBuffer_Init 和 RingBuffer_Push 都按值获取环形缓冲区,这意味着 temp 是您正在修改的副本。而是通过引用传递它们。
-
void RingBuffer_Push(int data,ringbuffer temp)必须是void RingBuffer_Push(int data,ringbuffer & temp)以避免获取环形缓冲区的副本 -
如果您更改副本,则 main 中的原件不变,因此 main 中的环仍然是空的
-
行为与内置类型相同。
void f(int i) { i++ ; /* here i values 2 */ } void g() { int i = 1 ; f(i); /* here i values 1, not 2 */ }
标签: c++ data-structures struct