昨天耀哥在問引用的時候,當時有一點點懵。平時經常用到引用的時候就是函數的參數傳遞。
引用就是某一變量的一個別名,對引用的操作與對變量直接操作完全一樣,但是要注意到的是引用並沒有新開辟內存空間,因此並不占內存單元。在聲明引用時,必須同時對其進行初始化。
為了簡單理解引用,寫了以下代碼:
int a = 10; int b = 20; std::cout << "a" << &a << std::endl; std::cout << "b" << &b << std::endl; std::cout << "________________________" << std::endl; int &c= a; std::cout << "a" << &a << std::endl; std::cout << "b" << &b << std::endl; std::cout << "c" << &c << std::endl; std::cout << "________________________" << std::endl; c = b; std::cout << "a" << &a << std::endl; std::cout << "b" << &b << std::endl; std::cout << "c" << &c << std::endl; std::cout << "________________________" << std::endl;
代碼運行結果如下:
不過在先前的調試中,當代碼走到“c=b;”時,看到a,b,c的值均為20。小腦袋有點混亂了,一度以為變量c同時是變量a和b的引用了。是知道的,引用初始化后,並不能再把該引用作為其他變量的別名了。一度還以為是c++11對規則進行了新的修改呢,還專門去查了c++11官方文檔。差點沒有反應過來。仔細一想,原來”c=b;“並不是修改別名,而只是簡單的整形賦值操作,邏輯上等同於“c= 20”;於是,寫了上面的代碼對想法進行了驗證。果然發現變量c的地址還是和變量a地址相同,並沒有在執行“c=b;”后,改變其地址。