C++中指針與引用的區(qū)別

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. 訪問(wèn)基本類(lèi)型的變量名,相當(dāng)于訪問(wèn)value列。
    公式:a = (select value from LNT where name='a')
2. 訪問(wèn)基本類(lèi)型的&變量名,相當(dāng)于訪問(wèn)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. 訪問(wèn)基本類(lèi)型的變量名,相當(dāng)于訪問(wèn)value列。
    公式:a = (select value from LNT where name='a')
2. 訪問(wèn)基本類(lèi)型的&變量名,相當(dāng)于訪問(wèn)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不是指針,也不是非基本類(lèi)型,error
    cout << p << endl;    //result: 0x61fe1c 
    cout << *p << endl;   //result: 999
    cout << &p << endl;   //result: 0x61fe10,在基本類(lèi)型的訪問(wèn)中這個(gè)值意義不大,它代表指針的指針。

result

999
0x61fe1c
0x61fe1c
999
0x61fe10

Description

1. 訪問(wèn)基本類(lèi)型的變量名,相當(dāng)于訪問(wèn)value列。
    公式:a = (select value from LNT where name='a')
2. 訪問(wèn)基本類(lèi)型的&變量名,相當(dāng)于訪問(wèn)pointer列,
    公式:&a = (select pointer from LNT where name='a')
3. +訪問(wèn)基本類(lèi)型的指針變量名,相當(dāng)于訪問(wèn)value列。
    公式:p = (select value from LNT where name='p')
4. +訪問(wèn)基本類(lèi)型的*指針變量名,相當(dāng)于指針為對(duì)應(yīng)value值的value列
    公式:*p = (select value from LNT where pointer=(select value from where name='p'))
5. +訪問(wèn)基本類(lèi)型的&指針變量名,相當(dāng)于訪問(wèn)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:定義數(shù)組

    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. 數(shù)組名的本質(zhì)為指針常量。非基本存儲(chǔ)類(lèi)型都是一個(gè)指針。
    2. 訪問(wèn)數(shù)組名,相當(dāng)于訪問(wèn)value列。
        公式:a = (select value from LNT where name='a')
    3. 訪問(wèn)*數(shù)組名,相當(dāng)于訪問(wèn)長(zhǎng)子value值。
        公式:*a = (select value from LNT where name='a[0]' and pointer=(select value from LNT where name='a'))
    4. 訪問(wèn)&數(shù)組名,相當(dāng)于訪問(wèn)pointer值。
        公式:&a = (select pointer from LNT where name='a')
    5. 訪問(wèn)數(shù)組名[index], 相當(dāng)于訪問(wèn)value列
        公式:a[0] = select value from LNT where name='a[0]'
    6. 訪問(wèn)&數(shù)組名[index], 相當(dāng)于訪問(wèn)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:二維數(shù)組

    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. 二維數(shù)組名實(shí)為二維指針常量。
    2. 訪問(wèn)二維數(shù)組名,相當(dāng)于訪問(wèn)value列。
        公式:a = (select value from LNT where name='a')
    3. 訪問(wèn)*二維數(shù)組名,相當(dāng)于訪問(wèn)長(zhǎng)子value值。
        公式:*a = (select value from LNT where name='a[0]' and pointer=(select value from LNT where name='a'))
    3. 訪問(wèn)**二維數(shù)組名,相當(dāng)于訪問(wèn)長(zhǎng)孫value值。
        公式:**a = (select value from LNT where name='a[0][0]' and pointer=(select value from LNT where name='a'))
    4. 訪問(wèn)&二維數(shù)組名,相當(dāng)于訪問(wèn)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. 字符串名實(shí)為字符數(shù)組變量名,本質(zhì)是一個(gè)指針常量。
(注意)除了&字符串名,可以訪問(wèn)到指針,其余的a, a[index],&a[index]所代表的指針變量皆是提供字符串形式。
    2. 訪問(wèn)字符串名,本該顯示value值為一個(gè)指針,但因字符串特征,并未返回內(nèi)存地址,而是直接訪問(wèn)字符串,讀此指針后的所有字符,直到size完成,或者遇到\0。
        公式:a = (select concat(value) from LNT where name like 'a[%]')
    3. 訪問(wèn)*a字符串名,訪問(wèn)了第一個(gè)字符,相當(dāng)于訪問(wèn)長(zhǎng)子value列。
        公式:*a = (select value from LNT where name='a[0]' and pointer=(select value from LNT where name='a'))
    3. 訪問(wèn)&字符串名,相當(dāng)于pointer列。
        公式:&a = (select pointer from LNT where name='a')
    4. 訪問(wèn)&字符串名[index],本該顯示pointer列,但字符串特征,并未返回內(nèi)存地址,而是直接訪問(wèn)字符串,讀此地址的所有字符串,直到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
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容