C指针警告指针

时间:2018-07-26 11:29:22

标签: c pointers warnings

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

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 %u\n", 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-pointer-types]的赋值      delay_buffer_front =&delay_buffer1;

3 个答案:

答案 0 :(得分:2)

  

类型相同。

不,不是。您可能对以下事实感到困惑(这是很常见的),即数组的标识符在几乎所有上下文中都评估为指向其第一个元素的指针(例外是例如运算符{{1 }}和&

但这不会改变数组是数组而指针是指针的事实。

这是指向指针的指针

sizeof

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

char **delay_buffer_front;

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

char (*delay_buffer_front)[40];

有了该声明,您就可以分配数组的标识符,因为如上所述,它的值就是这样的指针:

char *delay_buffer_front;

答案 1 :(得分:1)

这恰恰意味着两个指针不兼容。它比警告更是一个错误。

您可能想要这样:

char* delay_buffer_front;
delay_buffer_front = delay_buffer1;

代替:

char** delay_buffer_front;
delay_buffer_front = &delay_buffer1;

答案 2 :(得分:0)

由于您只需要交换缓冲区就不必创建指向指针的指针。只需创建类似类型的中间指针并将其用于交换即可。

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.