对不起,如果之前已经问过这个问题.在我搜索SO时,我找不到一个问我想知道什么.
基本上,当我有这个:
typedef struct node
{
int data;
node *node;
} *head;
Run Code Online (Sandbox Code Playgroud)
并做 node *newItem = new node;
我的印象是我正在宣布和保留空间,但没有定义,指向struct node,是正确的吗?
所以,当我这样做
newItem->data = 100 和 newItem->next = 0
我有点迷惑不解了.newItem = 0会说出究竟是什么?两个data和next?整个对象?
当我使用typedef时,我特别困惑.哪个部分是宏?我假设节点,因为我就是这样称呼它,但为什么我需要它呢?
最后,当我这样做时会发生什么:
node *temp;
temp = new node;
temp = head->next;
head->next = newItem;
newItem->next = temp;
Run Code Online (Sandbox Code Playgroud)
我的意思是,head-> next是一个指向对象newItem的指针,所以我假设不是newItem.data或者是next.那么我怎么能像上面这样安全地使用我上面描述的未初始化指针呢?现在是不是指向一个未初始化的指针?
小智 10
我的印象是我声明并保留空间,但没有定义,指向struct node的指针,是正确的吗?
不.您正在声明一个指针,在堆栈上为指针分配空间,并为其节点动态分配存储空间.
不要写这样的东西来迷惑自己:
typedef struct node
{
int data;
node * next;
} *head;
Run Code Online (Sandbox Code Playgroud)
在C++中编写结构的方法是:
struct node
{
int data;
node * next;
};
Run Code Online (Sandbox Code Playgroud)
您现在可以创建一个指针:
node * pnode;
Run Code Online (Sandbox Code Playgroud)
它为指针分配存储空间.
并且您可以为节点动态分配存储空间,并使指针指向它:
pnode = new node;
Run Code Online (Sandbox Code Playgroud)
或者一个一个地完成:
node * pnode = new node;
Run Code Online (Sandbox Code Playgroud)
现在当你说:
pnode->data = 10;
Run Code Online (Sandbox Code Playgroud)
你没有分配任何东西.您正在为被指向的节点实例调用的成员分配 10 .当然,如果你给你的节点一个构造函数(你通常应该这样做),你可以在一个节点中完成所有操作:datapnode
struct node
{
int data;
node * next;
node( int n, node * np ) : data( n ), next( np ) {}
};
node * pnode = new node( 10, 0 );
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1137 次 |
| 最近记录: |