C指针指向指针警告
C pointer to pointer warning
当我指向指针时收到警告。我不确定为什么;类型相同。
char delay_buffer1[40];
char delay_buffer2[40];
char** delay_buffer_front;
delay_buffer_front = &delay_buffer1;
objective 是交换缓冲区:
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;
就是说,这两个指针是不兼容的。与其说是警告,不如说是错误。
你可能想要这个:
char* delay_buffer_front;
delay_buffer_front = delay_buffer1;
而不是:
char** delay_buffer_front;
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;
因为您想要的只是交换缓冲区,所以您不必创建指向指针的指针。只需创建一个类似类型的中间指针并将其用于交换。
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.
当我指向指针时收到警告。我不确定为什么;类型相同。
char delay_buffer1[40];
char delay_buffer2[40];
char** delay_buffer_front;
delay_buffer_front = &delay_buffer1;
objective 是交换缓冲区:
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;
就是说,这两个指针是不兼容的。与其说是警告,不如说是错误。
你可能想要这个:
char* delay_buffer_front;
delay_buffer_front = delay_buffer1;
而不是:
char** delay_buffer_front;
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;
因为您想要的只是交换缓冲区,所以您不必创建指向指针的指针。只需创建一个类似类型的中间指针并将其用于交换。
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.