当我指向指针时收到警告。我不确定为什么;类型相同。
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);
warning: assignment from incompatible pointer type [-Wincompatible-pointer-types] delay_buffer_front = &delay_buffer1;
最佳答案
the types are the same.
不,他们不是。您可能对以下事实感到困惑(这很常见):几乎在所有上下文中,数组的标识符 都计算为指向其第一个元素的指针(例如,运算符 除外) &
和 sizeof
)。
但这并没有改变数组是数组,指针是指针的事实。
这是一个指向指针的指针:
char **delay_buffer_front;
您可能想要的是一个指向数组的指针:
char (*delay_buffer_front)[40];
或者您可能只是想要一个指向数组第一个元素的普通指针:
char *delay_buffer_front;
有了这个声明,你可以只分配数组的标识符,因为如上所述,它的计算结果是这样一个指针:
char *delay_buffer_front = delay_buffer1;
关于C指针指向指针警告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51537753/