代码之家  ›  专栏  ›  技术社区  ›  the_endian

是否有任何方法可以将void ptr“强制转换”到C中内联的结构指针?

  •  0
  • the_endian  · 技术社区  · 6 年前

    请注意,以下代码是通过void指针访问结构的人为示例,否则没有意义 。我的问题是,是否有另一种方法(通过使用(cast*)样式的语法)将void指针转换为内联结构指针?E、 G.我可以避开电话线吗 S_TEST *tester_node_ptr = tester_node.next; 然后直接在printf调用中进行强制转换?

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    //Set up our data structure
    typedef struct test{
        int field1;
        int field2;
        char name[50];
        void *next; // We will use this void * to refer to another struct test "node" for demo purposes
    } S_TEST;
    
    
    
    int main(void)
    {
        S_TEST tester_node;
        S_TEST tester_node2;
        tester_node.field1 = 55;
        tester_node.field2 = 25;
        strcpy(tester_node.name, "First Node");
        tester_node.next = &tester_node2; // We put the addr of the second node into the void ptr
        tester_node2.field1 = 775;
        tester_node2.field2 = 678;
        strcpy(tester_node2.name, "Second Node");
        tester_node2.next = NULL; // End of list
    
    
        S_TEST *tester_node_ptr = tester_node.next;
        printf("The second node's name is: %s", tester_node_ptr->name);
    
    
        return EXIT_SUCCESS;
    }
    
    2 回复  |  直到 6 年前
        1
  •  4
  •   StoryTeller - Unslander Monica    6 年前

    是的,你可以。就这么简单

    ((S_TEST *)tester_node.next)->name
    

    尽管我认为使用命名变量并依赖隐式转换更具可读性。

        2
  •  2
  •   rob mayoff    6 年前

    好吧,你应该声明一下 struct test *next 而不是 void *next 。但无论如何:

    printf("The second node's name is: %s", ((S_TEST *)tester_node.next)->name);