c - Node* root 和 Node *root 的区别

标签 c

<分区>

我想了解两者的用途??我现在的理解是 Node *root 是对指向节点对象的根指针的引用,另一方面 Node* root 是指向节点本身的指针(允许您通过通过引用)

最佳答案

此定义中的间距并不重要,您可以互换编写以下所有内容,它们都将 root 定义为指向 Node 的指针:

Node*root;

Node *root;

Node* root;

Node * root;

Node                        *root;  // I have seen that!

Node
*
root
;

Node(((*(root))));  // yes, this is allowed too!

\    
N\
od\
e*r\
oot ;          // ASCII art style: a corner case ;-) 

这是您喜欢使用的风格问题。请记住这些注意事项:

  • 可读性非常重要,可以避免愚蠢和微妙的错误,并使代码更易于维护,无论是您自己还是他人。

  • 一致性是使代码可读的关键:选择一种样式并在任何地方使用它。

  • Node * root 看起来像乘法,容易造成混淆。

  • 如果您在同一语句中声明多个变量,则将 * 添加到类型的末尾会造成混淆:

    Node* root, tree;  // defines a pointer root and a structure tree.
    

    鉴于

    Node *root, *tree; // defines 2 Node pointers root and tree.
    

    这就是许多程序员更喜欢将 * 添加到声明中的标识符的原因。

    使用 typedef隐藏指针性质,如 typedef Node *Nodeptr; 或更糟的 typedef Node *List; 往往容易出错,并在程序员和读者的头脑中造成更多的困惑。

关于c - Node* root 和 Node *root 的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41085118/

相关文章:

c - 是否在 C 中移动带符号短未定义行为的带符号位?

c - 为什么在将 calloc 与 unsigned int 一起使用时 coverity 会提示

c - MSVS 命令行参数

ios - 将十进制转换为十六进制,添加到字节数组

c - 为什么在通过命令行参数传递时,字符串中的十六进制未转换为十六进制?

C - 为什么我的文件 I/O 程序会出现此段错误?

c - 链表、值、添加和删除

c - 从 C 中的串行读取 arduino

c - 逆向工程时结构中的数据类型

c - 未定义对 "calcyear"的引用