【发布时间】:2021-02-01 19:36:54
【问题描述】:
我正在尝试使用函数迭代结构的变量。当我给出指针的起始地址时,我收到一条警告:“从不兼容的指针类型 [-Wincompatible-pointer-types] 初始化”。当我将此指针添加到函数时,我收到另一个警告:“从不兼容的指针类型 [-Wincompatible-pointer-types] 传递‘ManipulateMessage’的参数 1”。我已经搜索了这些错误,但结果对我没有帮助。该代码实际上正在运行,但我想避免未定义的行为。这个简单代码最简洁的方式是什么?
#include <stdio.h>
#include <stdlib.h>
/*************************************************
include
**************************************************/
//A message structure
typedef struct SIGNAL_STRUCTURE
{
int name;
int manipstarttime;
} signal_structure;
//Structure what collects all the signals
typedef struct SIGNAL_COLLECTOR
{
signal_structure EngSpeed;
signal_structure TransReqGear;
signal_structure CurrentGear;
} signal_collector;
//Function to do with the above structure
void ManipulateMessage(signal_structure * signal)
{
signal->name = 10;
signal->manipstarttime = 11;
}
/*************************************************
main
**************************************************/
void fcn(signal_collector * param_signal, int len)
{
int *pointer = param_signal;
while(len--)
{
printf("pointer: %p\n", pointer);
ManipulateMessage(pointer);
pointer += (sizeof(signal_structure) / sizeof(int));
}
}
int main(void)
{
signal_collector dummy;
fcn(&dummy, 2);
return 0;
}
【问题讨论】:
-
你为什么要把
signal_structure *当作int *? -
将
int *pointer替换为signal_structure *pointer,将pointer += (sizeof(signal_structure) / sizeof(int));替换为pointer++; -
fcn()期望参数是signal_collector结构的数组。您传递了一个signal_collector,但告诉它len参数中有两个。 -
另外,
while (len--)将迭代 3 次,而不是 2 次。while (--len)将迭代 2 次。 -
@AndrewHenle 类似的东西。但我可能会改用
size_t i... :)