C指针指向指针警告

标签 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);

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/

相关文章:

string - 对于未更改的字符串,去掉 Julia 的 `WARNING: redifining constant` 吗?

android - 在 Android 中获取 "Window already focused, ignoring focus gain of: com.android.internal.view.IInputMethodClient$Stub$Proxy"

gcc - 使用 GCC 有选择地删除警告消息

c - Applescript shell 脚本无法写入文件?

c - 如何与 fork 的后台进程进行通信/接口(interface)?

c - 如果声明了 int A[5],则只有 A 是指向 A[0] 的指针。这意味着 A 只是一个指针。那么 sizeof(A) 怎么会给出 20 的答案

c - 指向内存中指针的指针的大小

c - 指向 C 中结构中的结构的指针

c++ - 在 C++ 中,在销毁指向类的指针后,我可以使用新函数重新利用指针吗

c - 如何获取前面没有 '-' 或 '--' 的参数