++p->n指向第几个元素在这个定义中struct st{ int n; struct st *next }a[3]={5, &a[1],7,&a[ 2],9,NULL}, *p=a;
时间: 2024-05-26 09:17:21 浏览: 29
首先,这是一个定义了一个结构体类型为`st`的结构体。它有两个成员变量,一个是整型变量`n`,另一个是指向结构体类型`st`的指针`next`。
接下来,定义了一个数组`a`,其中包含3个结构体类型`st`的元素,每个元素都初始化了`n`和`next`成员变量。具体来说,第一个元素的`n`为5,`next`指向`a[1]`;第二个元素的`n`为7,`next`指向`a[2]`;第三个元素的`n`为9,`next`为NULL。
最后,定义了一个指向结构体类型`st`的指针`p`,并将其初始化为`a`。这样的话,`p`指向了数组`a`的第一个元素,即`{5, &a[1]}`。因此,`++p`会使`p`指向数组`a`的第二个元素,即`{7, &a[2]}`,而`++p->n`则会先将`p`指向的元素的`n`加1,变成8,然后返回它的地址,即指向`a[2]`的指针`next`。因此,`++p->n`等价于`*(++p)->next`,即获取`p`指向的元素的`next`成员变量所指向的元素。在这个例子中,它指向了数组`a`的第三个元素,即`{9, NULL}`。
相关问题
区分p++与p->next可以举个例子吗
好的,假设我们有一个链表结构体Node,其中每个结点的定义如下:
```
struct Node {
int val;
Node* next;
};
```
现在我们有一个指向第一个结点的指针p,我们想要访问下一个结点。那么,使用p++和p->next的区别如下:
1. p++:指针p向后移动一个位置,即指向下一个结点的指针。
```
p++;
```
2. p->next:访问指针p所指向的结点的成员变量next,得到指向下一个结点的指针。
```
p = p->next;
```
总体上来说,p++是指针运算,而p->next是成员变量的访问,它们的操作对象和操作方式不同。
#include<bits/stdc++.h> using namespace std; typedef struct Node * ptrtonode; typedef struct Node { int data,order; ptrtonode next; } node; int main() { ptrtonode head=new node(); head->next=NULL; int n,a,b; char c; scanf("%d",&n); int o=1; for(int i=1; i<=n; i++) { ptrtonode q; ptrtonode p; cin>>c; if(c=='H') { p=new node(); scanf("%d",&a); p->data=a; p->order=o; o++; p->next=head->next; head->next=p; } else if(c=='D') { cin>>a; if(a==0) { p=head->next; head->next=p->next; free(p); } else { q=head->next; while(q->order!=o) { q=q->next; } p=q->next; q->next=p->next; } } else if(c=='I') { scanf("%d%d",&a,&b); p=head->next; while(p->order!=a) { p=p->next; } q=new node(); q->data=b; q->order=o; o++; q->next=p->next; p->next=q; } } head=head->next; while(head) { cout<<head->data<<" "<<head->order<<endl; head=head->next; } return 0; }哪里有错误
这段代码的错误是使用了 `free()` 函数,而 `free()` 函数是 C 语言的函数,在 C++ 中应该使用 `delete` 或 `delete[]` 来释放内存。另外,使用 `cin` 读入字符时应该加上 `#include <iostream>`。下面是修改过的代码:
```c++
#include<iostream>
using namespace std;
typedef struct Node * ptrtonode;
typedef struct Node {
int data, order;
ptrtonode next;
} node;
int main() {
ptrtonode head = new node();
head->next = NULL;
int n, a, b;
char c;
cin >> n;
int o = 1;
for(int i = 1; i <= n; i++) {
ptrtonode q;
ptrtonode p;
cin >> c;
if(c == 'H') {
p = new node();
cin >> a;
p->data = a;
p->order = o;
o++;
p->next = head->next;
head->next = p;
}
else if(c == 'D') {
cin >> a;
if(a == 0) {
p = head->next;
head->next = p->next;
delete p;
}
else {
q = head->next;
while(q->order != o) {
q = q->next;
}
p = q->next;
q->next = p->next;
delete p;
}
}
else if(c == 'I') {
cin >> a >> b;
p = head->next;
while(p->order != a) {
p = p->next;
}
q = new node();
q->data = b;
q->order = o;
o++;
q->next = p->next;
p->next = q;
}
}
head = head->next;
while(head) {
cout << head->data << " " << head->order << endl;
head = head->next;
}
return 0;
}
```
相关推荐
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)