网站建设哪家公司最好台州seo快速排名
网站建设哪家公司最好,台州seo快速排名,alexa排名查询,兰州网页制作指针是一个变量#xff0c;存的是地址#xff1b;引用是一个别名#xff0c;本质是被引用对象本身。
本质区别
对比点指针#xff08;Pointer#xff09;引用#xff08;Reference#xff09;本质一个变量另一个变量的别名是否占内存 有独立内存通常不单独占#xff…指针是一个变量存的是地址引用是一个别名本质是被引用对象本身。本质区别对比点指针Pointer引用Reference本质一个变量另一个变量的别名是否占内存有独立内存通常不单独占编译器实现是否可为空可以nullptr必须绑定对象是否可改指向可以一旦绑定不能再换是否必须初始化可以先定义后赋值必须初始化使用方式*p解引用直接当原变量用语法层面对比指针int a 10; int* p a; *p 20; // 修改 a cout a; // 20特点p是变量p里存的是a的地址访问对象必须*p引用int a 10; int r a; r 20; // 修改 a cout a; // 20特点r不是新对象r就是a用法和普通变量一样内存层面理解指针的内存示意int a 10;int* p a;a: 10p: aa占 4 字节p也占 8 字节64 位系统引用的内存示意int a 10;int r a;a (r): 10r没有独立身份编译器内部把r当作a引用在汇编层面通常被优化成直接访问原变量能不能为 null指针可以int* p nullptr;常用于表示“暂时不指向任何对象”链表、树、可选对象引用不行int r; // ❌ 编译错误能不能“改绑”指针可以改指向int a 1, b 2; int* p a; p b; // 改指向 b引用不能改绑int a 1, b 2; int r a; r b; // ❌ 不是改绑定这行代码的含义是把 b 的值赋给 a绑定关系仍然是r - a函数参数中的区别指针传参void func(int* p) { if (p) *p 100; } int a 10; func(a);特点需要传地址可能为空要判空更底层、更灵活引用传参void func(int x) { x 100; } int a 10; func(a);特点语法更自然不用判空更安全C 推荐能用引用就用引用什么时候用指针什么时候用引用用引用的场景函数参数返回值不为 null表达“别名关系”不希望对象为空用指针的场景可能为空需要动态内存需要重新指向数据结构链表、树