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

int*和Type*有区别吗?

  •  3
  • Aillyn  · 技术社区  · 15 年前

    struct Node {
        Node* next;
        Node* previous;
        // data
    }
    

    因为 next previous Node* int* ? 如:

    struct Node {
        int* next;
        int* previous;
        // data
    }
    
    6 回复  |  直到 15 年前
        1
  •  5
  •   R.. GitHub STOP HELPING ICE    15 年前

    使用 int * 不正确并导致未定义的行为。你可以用任何一个 Node * void * ,但如果您使用除 ,它需要转换(或隐式转换,例如通过赋值)回 在你取消引用之前。

        2
  •  8
  •   San Jacinto    15 年前

    就你举的例子来说,这可能无关紧要(但你需要一个演员)。。但是帮你自己一个忙,养成使用正确类型的好习惯。

        3
  •  4
  •   miku    15 年前

    Node 不是一个 int 会比这个大 内景 内景 节点 会有所不同的。

        4
  •  2
  •   David E.    15 年前

    每个人都是对的。

    关键的一点是,尽管您可能知道指针的内部表示形式是地址,但不管数据类型如何,C都不做这样的假设。

    包含显式类型允许编译器更好地检查代码。

    struct Node {
        struct Node* next;
        struct Node* previous;
        // data };
    
        5
  •  0
  •   Logan    15 年前

    使用int*表示指向整数,使用Node*表示指向节点。

    不同之处在于指针指向的空间的大小。当其int*时,pointer++将按sizeof(int)移动指针;当其Node*时,pointer++将按sizeof(Node)移动指针。

        6
  •  0
  •   Arun    15 年前

    如果有

    Node * pNode;
    

    我们的期望是能够在没有任何强制转换的情况下编写下面这样的表达式

    (*pNode).next = ...
    pNode->next = ...