#include<iostream>
#include<limits>
#include<vector>
using namespace std;
struct node
{
int num;
struct node * next ;
};
int main()
{
struct node *start;
start = new node;
start->num=-3267;
start->next=0;
int num;
cout<<"Enter nums"<<endl;
cin>>num;
struct node * trav =start;
for(int i=0;i<num;i++)
{
int a;
trav->next=new node;
trav=trav->next;
cin>>a;
trav->num=a;
trav->next=0;
}
trav=start;
struct node * temp=new node;
trav=start->next;
cout<<"+++++++++++++++++Simple print ++++++++++++++++++++++++++++++++++++++++++"<<endl;
for(int i=1;i<=num;i++)
{
cout<<trav<<" "<<trav->num<<endl;
trav=trav->next;
}
trav = start->next;
cout<<"++++++++++++++++++++++order used print+++++++++++++++++++++++++++++++++++++++++++"<<endl;
for(int i=0;i<num;i++)
{
cout<<(trav+2*i)<<" "<<(trav+2*i)->num<<endl;
}
}
输出是:
Enter nums
5
1
2
3
4
5
+++++++++++++++++Simple print ++++++++++++++++++++++++++++++++
0x2c29c8 1
0x2c29d8 2
0x2c29e8 3
0x2c29f8 4
0x2c2a08 5
++++++++++++++++++++++order used print++++++++++++++++++++++++
0x2c29c8 1
0x2c29d8 2
0x2c29e8 3
0x2c29f8 4
0x2c2a08 5
答案 0 :(得分:2)
没有
他们目前处于正常状态的事实是由于您正在使用的特定分配器,并且无法计算在一般情况下保留。如果在分配列表节点之间分配了其他对象,则列表地址可能看起来不同。
作为一个简单的反例,为什么列表节点不能保证在内存中有序,考虑如果你交换节点2和3会发生什么。这是一个完全合法的操作来执行链接列表,但由于您没有重新分配节点,因此他们的地址不会发生变化。所以地址不再有序。
答案 1 :(得分:0)
我认为在这种情况下碰巧是这样的,因为你没有在堆上分配任何其他东西(使用new)。您的节点最终可以在任何地方结束。
答案 2 :(得分:0)
没有。一般来说,如果在一次操作中分配和填充记录,则将按顺序分配内存。但是 NO 要求地址是连续的。假设您在链接列表中分配50个节点,然后再分配10个节点。您的前50个可能是顺序的,但如果您稍后添加节点,则可以从完全不同的内存区域进行分配。