生活随笔
收集整理的這篇文章主要介紹了
C++ 对引用的理解4
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
引用的注意事項(xiàng)
// 引用注意事項(xiàng), 不能返回局部變量的引用
int & test3() { //因?yàn)榫植孔兞砍隽撕瘮?shù)體外 就會(huì)被銷毀int a = 10;return a;
}// 引用注意事項(xiàng), 返回值如果是引用, 那么函數(shù)可以作為左值進(jìn)行運(yùn)算
int & test4() {static int a = 100;return a;
}
int main()
{ test4() = 300;cout << test4() << endl; // 輸出300return 0;
}
指針的使用
struct Person {int age;int id;string name;
};void allocSpace(Person **p) { // Person **p = &per;*p = (Person *)malloc(sizeof(Person)); // *p 就是 per這個(gè) 指針變量, 指向了(就是存儲(chǔ)了對(duì)象的堆內(nèi)存地址) Person結(jié)構(gòu)體對(duì)象內(nèi)存(*p)->age = 10;(*p)->id = 1;
}
int main()
{ Person *per = NULL; // 這時(shí)候 per 是一個(gè)指針變量(可以指向Person結(jié)構(gòu)體的指針變量)allocSpace(&per); // 對(duì)這個(gè) per 指針變量取地址運(yùn)算&, allocSpace函數(shù)形參是為 Person數(shù)據(jù)類型的 二級(jí)指針cout << per->age << endl;cout << per->id << endl;free(per);return 0;
}
// 這里考慮為什么函數(shù)參數(shù)用二級(jí)指針, 這和交換變量的內(nèi)容時(shí)的原理是一樣的。
// int a=3;b=5; 用函數(shù)交換ab的值,需要傳遞ab的地址,同理這里Person *per = NULL; 如果讓per能關(guān)聯(lián)到allocSpace分配的堆內(nèi)存,也需要將per這個(gè)指針變量的 地址傳遞進(jìn)去,所以就用到了二級(jí)指針.
重點(diǎn)來(lái)了,指針的引用,如下代碼:
struct Person {int age;int id;string name;
};
void allocSpace2(Person* &p) { // Person* &p = per; 本質(zhì)上為 Person** const p = &per;p = (Person *)malloc(sizeof(Person)); // p本身存放的實(shí)際內(nèi)容其實(shí)是per這個(gè)指針變量所在的內(nèi)存地址, 因?yàn)閜是引用類型所以編譯給我們優(yōu)化了p->age = 23;p->id = 2;
}void test6() {Person *per = NULL;allocSpace2(per);cout << per->age << endl;cout << per->id << endl;free(per);
}
int main()
{ test6();return 0;
}
引用的本質(zhì)
{// 引用的本質(zhì)int a = 3;int &p = a; // 其本質(zhì)就是 int* const p = &a;p = 5; // 其本質(zhì)就是 *p = 5;
}
總結(jié)
以上是生活随笔為你收集整理的C++ 对引用的理解4的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。