c - 使用函数将地址写入结构中的指针失败

标签 c pointers struct

我有两个结构体pbufnetif,并为它们分配了两个变量(local_pbuflocal_netif) 。这些变量保存一些数据。还有另一个名为 wrapper_p_n 的结构体,它包含两个类型为 pbufnetif 的指针。我的目标是编写一个函数,通过按引用调用传递变量local_pbuflocal_netif,然后将两个指针包装在一个结构中称为wrapper_p_n。然后我想使用通过引用调用wrapper_p_n提供给另一个函数。不幸的是我收到错误消息: [错误] 无法在赋值中将 'pbuf**' 转换为 'pbuf*'

#include <iostream>
#include <stdlib.h>
#include <stdio.h>
#include <stdint.h>

struct pbuf{
    int a;
    int b;
};

struct netif{
    int c;
    int d;
};

struct wrapper_p_n{ // wrapper for pbuf- and netif-struct pointer
    struct pbuf *wp_val_p;
    struct netif *wp_val_n;
};

void rx_local_p_n(struct pbuf *rx_pbuf, struct netif *rx_netif)
{
    // wrap the received pointer
    
    struct wrapper_p_n *local_w_p_n;
    
    local_w_p_n->wp_val_p = &rx_pbuf;
    local_w_p_n->wp_val_n = &rx_netif;
    
    /*Passing *local_w_p_n pointer to another function: Example: */
    /*ex_function(&local_w_p_n)*/
}

int main(int argc, char** argv) {
    
    // give values to local_pbuf and netif
    struct pbuf local_pbuf;
    local_pbuf.a = 1;
    local_pbuf.b = 2;
    
    struct netif local_netif;
    local_netif.c = 3;
    local_netif.d = 4;
    
    //passing pbuf- and netif-stuct to function
    rx_local_p_n(&local_pbuf, &local_netif);
        
    return 0;
}

最佳答案

在函数 void rx_local_p_n 中,您传入指向 pbufnetif 结构体的指针。这些已经是指针,不需要使用运算符 (&) 的地址分配给包装器结构:通过这样做,您将获得指针本身的内存位置。这就是为什么它提示无法将 pbuf** 转换为 pbuf*

解决方案

  1. local_w_p_n->wp_val_p = &rx_pbuf;local_w_p_n->wp_val_p = rx_pbuf;
  2. local_w_p_n->wp_val_n = &rx_netif;local_w_p_n->wp_val_n = rx_netif;

关于c - 使用函数将地址写入结构中的指针失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64050503/

相关文章:

objective-c - Objective-C 是如何编译的?

c - 数独 9 个盒子 ( 3x3 ) C 中的递归回溯所有组合

c++ - 如何在类中使用结构

C++ 初学者 - 使用结构和常量时遇到问题!

c++ - 从结构中形成 16 位字

c - %*s 格式说明符是什么意思?

c - GDB 中不显示函数名称

C++以最佳方式返回结构和 vector

c - 将预分配的 char* 缓冲区传递给 c 函数

c++ - 仅当它是指针时才删除泛型类型的值