11.30 解引用到底是解的是什么、用一级指针insert实际是一个副本

发布于 2024-11-30  84 次阅读


解引用是指通过指针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,那么对它的修改就是在内存的层次上修改该变量的值,上文图片已经说过

届ける言葉を今は育ててる
最后更新于 2024-11-30