切换主题
字数
1026 字
阅读时间
5 分钟
结构体就是对象 指针就是引用
涉及到链表的操作,一定要在纸上把过程先画出来,再写程序。 要区分清楚 引用(也就是指针)和对象,对象是程序中创建的实际数据实体,而引用是指向该对象的一个指针或别名。引用使得你可以通过一个变量来访问和操作对象,而不需要复制整个对象。简单来说,引用是指向对象的"地址",而对象是存储在内存中的实际数据。
{}是创建对象的语法, 是一种数据结构, 只能赋给引用类型; =
是给变量赋 值类型 或者 引用类型的语法 . 是用来访问数据结构成员的, 在c语言中是各种结构体的成员, 在js中,由于对象可以代表一切数据结构, 所有 可以说是 访问对象的成员(对象的属性)的语法 {}=是结构赋值的语法, 和 . 其实是一个功能,比如 const { textare } = input 相当于 const textare = input.textare, 有点类似于 int * textare = & input
const ytextarea : {} = yinput.ctextarea; const ytextarea = yinput.ctextarea; int * input= &textarea ”: 看这两个语句, 假设ctextarea是一个对象, 那么ytextarea 就是引用变量名, input 也是一个数据结构的引用变量名,ctextarea是这个yinput 引用变量指的对象的一个成员, ytextarea是ctextarea的新的引用变量名; input是一个指针, textare是这个指针变量指的地址(ytextarea )所代表的值,&textarea(ctextarea)是地址本身 可以把c语言中的指针类型看成一种数据结构, 这种数据结构中有指针变量名和指针指向的地址, 指针变量名你给可以看作是引用变量名, 指针指向的地址就是这种数据结构的成员 在 ytextarea外面加个{}, 就变成{ytextarea}, 和 yinput为同一个等级;我在input外面加个*,就变成*input, 和textarea是同一个等级
![[2024-10-19 00-45-05 1.mkv]]
function modify(obj) {
obj.value = 100; // 修改对象的属性
}
let obj = { value: 10 };
modify(obj);
console.log(obj.value); // 输出 100
#include <stdio.h>
void modify(int *p) {
*p = 100; // 通过指针修改外部变量
}
int main() {
int a = 10;
modify(&a); // 传递变量 a 的地址
printf("%d", a); // 输出 100
return 0;
}
在链表数据结构中, 我误以为 current.next 改变后 , current 所代表(引用)的节点也变了, 就是犯了以下第一个中的错误"引用在赋值之前就已经建立了关系,而 a
的重新赋值不会影响 b
"
let a = {};
a.c = 10;
let b = a;
a = 11;
console.log(b);
a.c = 10;
:给对象a
添加一个属性c
,并赋值为10
。此时,a
指向的对象变成{ c: 10 }
。let b = a;
:将a
赋值给b
。因为a
是引用类型,b
现在指向与a
相同的内存地址,也就是说,b
和a
引用了同一个对象{ c: 10 }
。a = 11;
:将a
重新赋值为11
,这会让a
不再指向对象{ c: 10 }
,而是指向一个新的number
类型值11
。然而,b
仍然引用最初的对象{ c: 10 }
,因为b
和a
之间的引用在赋值之前就已经建立了关系,而a
的重新赋值不会影响b
。console.log(b);
:输出b
,由于b
仍然指向{ c: 10 }
,因此输出的结果将是该对象{ c: 10 }
。
let a = {}; // 声明对象 a
a.c = 10; // 给对象 a 添加属性 c,值为 10
let b = a; // 让 b 引用 a 指向的同一个对象
a.c = 11; // 修改 a 的属性 c 的值为 11
console.log(b.c); // 输出 b 的属性 c 的值
贡献者
sunchengzhi