解引用是指通过指针p访问指针所指向的变量的值
说透一点,解引用就是把指针p所保存的地址给解出来,(这个地址对应的)内存存的数据就是它返回的值
而这个指针p自己的地址,也就是&p,和上面的操作毫无关系
指针p本身(就是说不加&)表示的是别人的地址,可怜啊卧槽
而对结构体指针变量,它就是表示节点,或者说,它存的就是一个节点
中文#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
typedef struct node {
int data;
struct node* next;
}node;
node* create(int data) {
node* newnode = malloc(sizeof(node));
newnode->data = data;
newnode->next = NULL;
return newnode;
}
void insert(int* head, int data) {
node* newnode = create(data);
if (head == NULL) {
head = newnode;
}
else {
node* temp = head;
while (temp->next != NULL) {
temp = temp->next;
}
temp->next = newnode;
}
}
void show(int* head) {
node* temp = head;
while (1) {
printf("%d",temp->data);
if (temp->next == NULL) {
break;
}
temp = temp->next;
}
}
int main() {
int a, b, c;
scanf("%d %d %d", &a, &b, &c);
node* head = NULL;
insert(head, a);
insert(head, b);
insert(head, c);
show(head);
return 0;
}
上面的尾插法,我传入head,而不是&head,同时insert函数的形参改成一级指针,但是无法运行
为什么?
我们知道,形参传的是一个副本,那在这里其实也是一样的呀
你传入head,就是传入head所保存的地址
那么insert里面的形参是一个保存这个地址的副本,这个副本自身的地址却不是&head
if (head == NULL) {
head = newnode;
}
对这串代码而言,副本head保存的地址改为newnode,但是副本就是副本,它影响不到主函数里面的head啊
//让副本自身的地址成为&head,那么对它的修改就是在内存的层次上修改该变量的值,上文图片已经说过
Comments NOTHING