1.變數名回顧
問題:
一段連續的儲存空間只能有乙個別名嗎?
2.c++中引用
注意:普通引用int a = 4;
int& b = a; //b為a的別名
b = 5; //操作b就是操作a
在定義時
必須用同型別的變數進行初始化
3.c++對三目運算子做了什麼?
4.引用的意義int a = 1;
int b = 2;
(a < b ? a : b) = 3;//正確,返回a或b的引用,可作為左值
(a < b ? 1 : b) = 3;//錯誤,返回1或b的值,不能作為左值
5.特殊的引用
const引用
int a = 4;
const int& b = a;
int* p = (int*)&b;
b = 5;//error 唯讀變數
*p = 5;//ok,修改變數a的值
6.引用有自己的儲存空間嗎?const int& b = 1; //ok;
int* p = (int*)&b;
b = 5;//error 唯讀變數
*p = 5;//ok 修改變數a的值
7.引用的本質#include struct tref
;int main(int argc, char *ar**)
;
printf("sizeof(char&) = %d\n", sizeof(char&));
printf("sizeof(rc) = %d\n", sizeof(rc));
printf("sizeof(tref) = %d\n", sizeof(tref));
printf("sizeof(ref.r) = %d\n", sizeof(ref.r));
return 0;}/*
sizeof(char&) = 1
sizeof(rc) = 1
sizeof(tref) = 4
sizeof(ref.r) = 1
*/
引用在c++中的內部實現是乙個指標常量
type& name < -- > type* const name;
注意:c++編譯器在編譯過程中用指標常量作為引用的內部實現,因此引用所占用的空間大小與指標相同
從使用的角度,引用只是乙個別名,c++為了實用性而隱藏了引用的儲存空間這一細節
8.函式引用的返回#include struct tref
;int main(int argc, char* ar**)
; printf("sizeof(r) = %d\n", sizeof(r));
printf("sizeof(r.before) = %d\n", sizeof(r.before));
printf("sizeof(r.after) = %d\n", sizeof(r.after));
printf("&r.before = %p\n", &r.before);
printf("&r.after = %p\n", &r.after);
return 0;}/*
sizeof(r) = 12
sizeof(r.before) = 4
sizeof(r.after) = 4
&r.before = 0xbf84d43c
&r.after = 0xbf84d444
*/
9.引用和指標什麼關係?如何理解「引用的本質就是指標常量」#include //返回區域性變數d的引用,函式呼叫結束,這個變數就被銷毀
int& demo()
//返回靜態區域性變數s的引用。一直存在
int& func()
int main(int argc, char* ar**)
demo: d = 0
func: s = 0
main: rd = 14335988
main: rs = 0
demo: d = 0
func: s = 11
main: rd = 14335988
main: rs = 11
指標是乙個變數
引用只是乙個變數的新名字
從使用c++的角度來看
從c++編譯器角度來看
在工程專案開發中
小結#include int a = 1;
struct sv
;int main()
; //陣列是一片連續的記憶體空間
int& array = ; // &array[1] - &array[0] = ? expected ==> 4
printf("&sv.x = %p\n", &sv.x);
printf("&sv.y = %p\n", &sv.y);
printf("&sv.z = %p\n", &sv.z);
delete pc;
return 0;
}
關於交換機trunk的疑問 引用別人的
乙太網埠有 3種鏈路型別 access trunk hybird access型別埠只能屬於1個vlan 般用於連線計算機 埠 trunk型別埠可以允許多個vlan通過,可以接收和傳送多個vlan 報文,一 般用於交換機之間的 連線 hybrid型別埠可以允許多個vlan通過,可以接收和傳送多個vl...
關於 retainCount 的疑問
我在 main.m 裡寫了三個測試例子,就是不明白為什麼輸出的都是 1 別人幫忙測試了下,輸出的是額外的超大的值 nsstring str1 welcome nslog d str1 retaincount nsstring str2 nsstring stringwithstring you ns...
關於scanf的疑問
scanf函式是從標準輸入流 stdin 讀取資料,按照格式說明引數,將資料寫入引數位址所在空間,標準輸入流預設的是鍵盤輸入流,但是,由於作業系統的緩衝區管理機制,從鍵盤上輸入的資料不是直接被scanf函式讀取的,而是暫存在記憶體緩衝區,只有遇到回車鍵的時候,scanf函式才會開始工作,並且,最後輸...