C指针到指针警告



当我指向一个指针时,会收到一个警告。我不知道为什么;类型是相同的。

char delay_buffer1[40];
char delay_buffer2[40];
char** delay_buffer_front;
delay_buffer_front = &delay_buffer1;

目标是交换缓冲区:

void swap_string_buffer(void** pointer, void* buffer1, void* buffer2) {
printf("pointer: %u. buffer1: %u. buffer2 %un", pointer, buffer1, buffer2);
if(*pointer == buffer1) *pointer = buffer2;
else *pointer = buffer1;
}

示例代码:

copy_content_to(delay_buffer_front);
swap_string_buffer((void**) delay_buffer_front, (void*) delay_buffer1,(void*)delay_buffer2);
fprintf(file, "%s", delay_buffer_front);

警告:不兼容指针类型的赋值[-Wincompatible指针类型]delay_buffer_front=&delay_buffer1;

类型相同。

不,它们不是。您可能会对以下事实感到困惑(这很常见(:在几乎所有上下文中,数组的标识符都计算为指向其第一个元素的指针(例如,运算符&sizeof除外(。

但这并不能改变这样一个事实:数组就是数组,指针就是指针

这是指向指针的指针:

char **delay_buffer_front;

您可能想要的是指向数组的指针:

char (*delay_buffer_front)[40];

或者您可能只是想要一个指向数组第一个元素的普通指针:

char *delay_buffer_front;

使用该声明,您可以只分配数组的标识符,因为如上所述,它的计算结果是这样一个指针:

char *delay_buffer_front = delay_buffer1;

这意味着,这两个指针是不兼容的。与其说是警告,不如说是错误。

你可能想要这个:

char* delay_buffer_front;
delay_buffer_front = delay_buffer1;

而不是:

char** delay_buffer_front;
delay_buffer_front = &delay_buffer1;

因为您只需要交换缓冲区,所以不必创建指向指针的指针。只需创建一个类似类型的中间指针并将其用于交换。

char* delay_buffer_front; //Intermediate pointer to store the address of first buffer
delay_buffer_front = delay_buffer1; //Store the address of the first buffer in the 
//intermediate pointer.

最新更新