不理解编译器警告 - "passing unsigned into to type unsigned int*"
Don't understand compiler warning - "passing unsigned into to type unsigned int*"
我创建了一个结构类型
typedef struct component {
char IPaddress[25];
int serverPortNumber;
unsigned int handle;
};
我创建了该结构的三个实例。我正在使用内置的 CVI 函数连接到 TCP 服务器。它具有我提供的以下形式和参数。
ConnectToTCPServerEx(
pComponent->handle, pComponent->serverPortNumber,
pComponent->IPaddress, ClientTCPCB, NULL, TCP_TIMEOUT, TCP_ANY_LOCAL_PORT)
在此函数调用之前的代码行中,我使用以下表达式获取我已创建的已声明组件结构的地址。
struct component *pComponent = &SomeComponentStruct;
我的编译器returns以下
warning: incompatible integer to pointer conversion passing 'unsigned
int' to parameter of type 'unsigned int *'; take the address with &
为什么我会收到此警告? CVI 函数期望 'handle' 参数是一个按引用传递的无符号整数(以便它可以被写入。)结构 .handle 的成员确实是一个无符号整数。但在这种情况下,我将 指针传递给结构 ,然后使用 -> 运算符访问 'handle'。向其中添加“&”是没有意义的,因为那样的话我会将一个指针传递给一个指针。
可能是因为下面这行
struct component *pComponent = &SomeComponentStruct;
在我的代码中实际上是两行,我声明了一个指向类型结构组件的指针,但是然后使用一个函数为它分配一个实际的 decalred 结构组件 onject 的地址(取决于 int 参数)。
struct component *pComponent = NULL;
pComponent = setComponent(component) //this function returns the address of a declared struct component
编译器是不是没有捕捉到这个?
pComponent->handle
是成员对象本身,而不是指向它的指针。 pComponent
是一个指针,是的,但是 ->
取消了对它的引用。你确实需要做 &pComponent->handle
,然后你就会有一个指向对象的指针(而不是指向指针的指针)。完全正确。
我创建了一个结构类型
typedef struct component {
char IPaddress[25];
int serverPortNumber;
unsigned int handle;
};
我创建了该结构的三个实例。我正在使用内置的 CVI 函数连接到 TCP 服务器。它具有我提供的以下形式和参数。
ConnectToTCPServerEx(
pComponent->handle, pComponent->serverPortNumber,
pComponent->IPaddress, ClientTCPCB, NULL, TCP_TIMEOUT, TCP_ANY_LOCAL_PORT)
在此函数调用之前的代码行中,我使用以下表达式获取我已创建的已声明组件结构的地址。
struct component *pComponent = &SomeComponentStruct;
我的编译器returns以下
warning: incompatible integer to pointer conversion passing 'unsigned int' to parameter of type 'unsigned int *'; take the address with &
为什么我会收到此警告? CVI 函数期望 'handle' 参数是一个按引用传递的无符号整数(以便它可以被写入。)结构 .handle 的成员确实是一个无符号整数。但在这种情况下,我将 指针传递给结构 ,然后使用 -> 运算符访问 'handle'。向其中添加“&”是没有意义的,因为那样的话我会将一个指针传递给一个指针。
可能是因为下面这行
struct component *pComponent = &SomeComponentStruct;
在我的代码中实际上是两行,我声明了一个指向类型结构组件的指针,但是然后使用一个函数为它分配一个实际的 decalred 结构组件 onject 的地址(取决于 int 参数)。
struct component *pComponent = NULL;
pComponent = setComponent(component) //this function returns the address of a declared struct component
编译器是不是没有捕捉到这个?
pComponent->handle
是成员对象本身,而不是指向它的指针。 pComponent
是一个指针,是的,但是 ->
取消了对它的引用。你确实需要做 &pComponent->handle
,然后你就会有一个指向对象的指针(而不是指向指针的指针)。完全正确。