美文网首页
C++中指针与引用的区别

C++中指针与引用的区别

作者: 剑心折手 | 来源:发表于2023-11-08 17:24 被阅读0次

Code 1:变量声明

    int a;
    cout << a << endl;     //result: 0
    cout << &a << endl;    //result: 0x61fe1c
    //cout << *a << endl;  //error, because a is not a pointer

Result

0
0x61fe1c

Description

1. 访问基本类型的变量名,相当于访问value列。
    公式:a = (select value from LNT where name='a')
2. 访问基本类型的&变量名,相当于访问pointer列,
    公式:&a = (select pointer from LNT where name='a')

Memory datas tables

pointer value
0x61fe1c 0

Logical names tables

name type datatype pointer value
a var int 0x61fe1c 0

Code 2:变量定义

    int a = 2;
    cout << a << endl;    //result: 2
    cout << &a << endl;   //result: 0x61fe1c
    //cout << *a << endl; //error, because a is not a pointer

Result

2
0x61fe1c

Description

1. 访问基本类型的变量名,相当于访问value列。
    公式:a = (select value from LNT where name='a')
2. 访问基本类型的&变量名,相当于访问pointer列,
    公式:&a = (select pointer from LNT where name='a')

Memory datas tables

pointer value
0x61fe1c 2

Logical names tables

name type datatype pointer value
a var int 0x61fe1c 2

Code 3:定义指针变量

    int a=999;
    int *p=&a;
    cout << a << endl;    //result: 999
    cout << &a << endl;   //result: 0x61fe1c
    //cout << *a << endl; //a不是指针,也不是非基本类型,error
    cout << p << endl;    //result: 0x61fe1c 
    cout << *p << endl;   //result: 999
    cout << &p << endl;   //result: 0x61fe10,在基本类型的访问中这个值意义不大,它代表指针的指针。

result

999
0x61fe1c
0x61fe1c
999
0x61fe10

Description

1. 访问基本类型的变量名,相当于访问value列。
    公式:a = (select value from LNT where name='a')
2. 访问基本类型的&变量名,相当于访问pointer列,
    公式:&a = (select pointer from LNT where name='a')
3. +访问基本类型的指针变量名,相当于访问value列。
    公式:p = (select value from LNT where name='p')
4. +访问基本类型的*指针变量名,相当于指针为对应value值的value列
    公式:*p = (select value from LNT where pointer=(select value from where name='p'))
5. +访问基本类型的&指针变量名,相当于访问pointer列
    公式:&p = (select pointer from LNT where name='p')

Memory datas tables

pointer value
0x61fe1c 2
0x61fe10 0x61fe1c

Logical names tables

name type datatype pointer value
a var int 0x61fe1c 999
p pointer int 0x61fe10 0x61fe1c


Code 4:定义数组

    int a[]={1,2,3,4,4,5,6,7};
    cout << a << endl;      //result:0x61fe00
    cout << *a << endl;     //result:1
    cout << &a << endl;     //result:0x61fe00
    cout << a[0] << endl;   //result:1
    cout << &a[0] << endl;  //result:0x61fe00
    cout << a[3] << endl;   //result:4
    cout << &a[3] << endl;  //result:0x61fe0c

result

0x61fe00
1
0x61fe00
1
0x61fe00
4
0x61fe0c

Description

    1. 数组名的本质为指针常量。非基本存储类型都是一个指针。
    2. 访问数组名,相当于访问value列。
        公式:a = (select value from LNT where name='a')
    3. 访问*数组名,相当于访问长子value值。
        公式:*a = (select value from LNT where name='a[0]' and pointer=(select value from LNT where name='a'))
    4. 访问&数组名,相当于访问pointer值。
        公式:&a = (select pointer from LNT where name='a')
    5. 访问数组名[index], 相当于访问value列
        公式:a[0] = select value from LNT where name='a[0]'
    6. 访问&数组名[index], 相当于访问pointer列
        公式:a[0] = select pointer from LNT where name='a[0]'

Memory datas tables

pointer value
0x61fe00 1
0x61fe04 2
0x61fe08 3
0x61fe12 4
0x61fe16 5
0x61fe20 6
0x61fe24 7

Logical names tables

name type datatype pointer value
a pointer int[] 0x61fe00 0x61fe00
a[0] var int 0x61fe00 1
a[1] var int 0x61fe04 2
a[2] var int 0x61fe08 3
a[3] var int 0x61fe12 4
a[4] var int 0x61fe16 5
a[5] var int 0x61fe20 6
a[6] var int 0x61fe24 7

Code 5:二维数组

    int a[2][3]={{1,2,3},{4,5,6}};
    cout << a << endl;       //result:0x61fe00
    cout << *a << endl;      //result:0x61fe00
    cout << **a << endl;     //result:1
    cout << &a << endl;      //result:0x61fe00
    cout << a[1] << endl;    //result:0x61fe0c
    cout << &a[1] << endl;   //result:0x61fe0c
    cout << *a[1] << endl;   //result:4    

result

0x61fe00
0x61fe00
1
0x61fe00
0x61fe0c
0x61fe0c
4

Description

    1. 二维数组名实为二维指针常量。
    2. 访问二维数组名,相当于访问value列。
        公式:a = (select value from LNT where name='a')
    3. 访问*二维数组名,相当于访问长子value值。
        公式:*a = (select value from LNT where name='a[0]' and pointer=(select value from LNT where name='a'))
    3. 访问**二维数组名,相当于访问长孙value值。
        公式:**a = (select value from LNT where name='a[0][0]' and pointer=(select value from LNT where name='a'))
    4. 访问&二维数组名,相当于访问pointer值。
        公式:&a = (select pointer from LNT where name='a')

emory datas tables

pointer value
0x61fe00 1
0x61fe04 2
0x61fe08 3
0x61fe12 4
0x61fe16 5
0x61fe20 6

Logical names tables

name type datatype pointer value
a pointer int[][] 0x61fe00 0x61fe00
a[0] pointer int[] 0x61fe00 0x61fe00
a[0][0] var int 0x61fe00 1
a[0][1] var int 0x61fe04 2
a[0][2] var int 0x61fe08 3
a[1] pointer int[] 0x61fe12 0x61fe12
a[1][0] var int 0x61fe12 4
a[1][1] var int 0x61fe16 5
a[1][2] var int 0x61fe20 6

Code 6:字符串定义

    char a[]="1234567890";
    cout << a << endl;       //result: 1234567890
    cout << &a << endl;      //result: 0x61fe00
    cout << *a << endl;      //result: 1
    cout << &*a << endl;     //result: 1234567890
    cout << *&a << endl;     //result: 1234567890
    cout << str51[3] << endl;//result: 4
    //cout << *str51[3] << endl; //error, because str51[3] is not a pointer but a prime value.
    cout << &str51[3] << endl;//result:4567890     

result

1234567890
0x61fe00
1
1234567890
1234567890
4
4567890

Description

    1. 字符串名实为字符数组变量名,本质是一个指针常量。
(注意)除了&字符串名,可以访问到指针,其余的a, a[index],&a[index]所代表的指针变量皆是提供字符串形式。
    2. 访问字符串名,本该显示value值为一个指针,但因字符串特征,并未返回内存地址,而是直接访问字符串,读此指针后的所有字符,直到size完成,或者遇到\0。
        公式:a = (select concat(value) from LNT where name like 'a[%]')
    3. 访问*a字符串名,访问了第一个字符,相当于访问长子value列。
        公式:*a = (select value from LNT where name='a[0]' and pointer=(select value from LNT where name='a'))
    3. 访问&字符串名,相当于pointer列。
        公式:&a = (select pointer from LNT where name='a')
    4. 访问&字符串名[index],本该显示pointer列,但字符串特征,并未返回内存地址,而是直接访问字符串,读此地址的所有字符串,直到size完成,或者遇到\0。
        公式:&a[index] = ...

emory datas tables

pointer value
0x61fe00 '1'
0x61fe01 '2'
0x61fe02 '3'
0x61fe03 '4'
0x61fe04 '5'
0x61fe05 '6'
0x61fe06 '7'
0x61fe07 '8'
0x61fe08 '9'

Logical names tables

name type datatype pointer value
a pointer char[] 0x61fe00 0x61fe00
a[0] var char 0x61fe00 1
a[1] var char 0x61fe01 2
a[2] var char 0x61fe02 3
a[3] var char 0x61fe03 4
a[4] var char 0x61fe04 5
a[5] var char 0x61fe05 6
a[6] var char 0x61fe06 6
a[7] var char 0x61fe07 6
a[8] var char 0x61fe08 6

相关文章

  • C++基础

    C++ 值传递、指针传递、引用传递详解C++中引用传递与指针传递区别 引用传递和指针传递的区别 引用的规则:(1)...

  • 指针和引用的区别

    参照lyd_253261362的专栏的文章详细介绍=====c++中的引用与指针的区别 c++中的引用与指针的区别...

  • java中的引用与c++中的指针的区别

    java中的引用与c++中的指针的区别 Java的引用和C++的指针都是指向一块内存地址的,通过引用或指针来完成对...

  • 指针和引用的辨析

    先来看两个图 指针与引用的区别 1.指针在C和C++中均有,而引用是C++独有的特性(*指针申明符号,&引用申明符...

  • c++引用与指针的区别

    c++引用与指针的区别(着重理解) - thisispan - 博客频道 - CSDN.NET

  • leet code 笔记

    结构体生成内存申请 malloc与new,C++中的指针与引用,C++struct与class的区别 new 不但...

  • C++面试题目总结

    C++常考题目参考本 1、指针和引用的区别 实体与别名 内存分配,指针需要引用不需要 sizeof() 对象的大小...

  • C++之指针和引用

    指针和引用的区别? 在C++的编码中我们发现很多地方都大量地使用引用,能用指针实现的功能改用引用几乎也能实现,甚至...

  • C++中引用与指针的区别

    (1)当引用被创建时,它必须被初始化。而指针则可以在任何时候被初始化。 (2)一旦一个引用被初始化为指向一个对象,...

  • C++中的引用和指针

    C++ 引用与指针的比较 引用是 C++ 中的概念,初学者容易把引用和指针混淆一起。 以下程序中,n 是m的一个引...

网友评论

      本文标题:C++中指针与引用的区别

      本文链接:https://www.haomeiwen.com/subject/jsvqwdtx.html