其實(shí)引用是綁定一個變量或常量,且一旦綁定不可改變所以在用引用時必須對其初始化,且非常量引用不可直接綁定字面值即一個數(shù),只能通過變量進(jìn)行綁定
2017-07-17
可以把別名理解為一種遠(yuǎn)程導(dǎo)彈,而變量就是近距離武器,別名的好處就是傳遞給函數(shù)的時候可以遠(yuǎn)程打到原來的地址的值,而變量因?yàn)榘l(fā)生了復(fù)制,打不到了
2017-07-17
申請內(nèi)存需要判斷是否成功, 釋放內(nèi)存需要把指針置NULL;
if (NULL == p) {//error!!}
if (NULL == p) {//error!!}
2017-07-17
內(nèi)聯(lián)函數(shù), 在函數(shù)簽名之前要加上inline, 這樣函數(shù)代碼塊會替換掉調(diào)用出的那行函數(shù)名, 這樣減少了函數(shù)調(diào)用棧push和pop stack的開銷.
為啥不什么地方都用inline呢? 首先, inline是建議性的, 由編譯器決定具體是否替換代碼(遞歸是堅決不會進(jìn)行替換的); 其次, 內(nèi)聯(lián)函數(shù)只適合邏輯簡單, 且調(diào)用頻繁(不停的call這個函數(shù)), 如果內(nèi)聯(lián)函數(shù)中有for, while循環(huán)的話, 往往效果不好, 不如單獨(dú)給其一個函數(shù)棧來使用. 最后, 遞歸函數(shù)是無法使用內(nèi)聯(lián)方式的.
為啥不什么地方都用inline呢? 首先, inline是建議性的, 由編譯器決定具體是否替換代碼(遞歸是堅決不會進(jìn)行替換的); 其次, 內(nèi)聯(lián)函數(shù)只適合邏輯簡單, 且調(diào)用頻繁(不停的call這個函數(shù)), 如果內(nèi)聯(lián)函數(shù)中有for, while循環(huán)的話, 往往效果不好, 不如單獨(dú)給其一個函數(shù)棧來使用. 最后, 遞歸函數(shù)是無法使用內(nèi)聯(lián)方式的.
2017-07-17
函數(shù)的重載(overload)和Java語言的函數(shù)重載一樣, 函數(shù)名一致, 但是函數(shù)簽名中的 返回值類型和參數(shù)是不一樣的.
2017-07-17
最贊回答 / JUST_4_IT
數(shù)組numArr[3]={3,8,6},數(shù)組長度其實(shí)是4,由于只是初始化了前三個,所以默認(rèn)第四個為‘0’({3,8,6,0}),所以numArr[3]=0,在調(diào)用getMax的時候就是在比較0,3哪個大了,所以返回值是3.
2017-07-13
&符號就是取地址符號, 含義只這么一個; *符號就是創(chuàng)建一個指針, 或者做一次地址跳轉(zhuǎn);
int a = 10; // 給a分配一個內(nèi)存邏輯地址0x100001, 這個地址存放了值10;
int *p = &a; //創(chuàng)建變量p, 給p分配地址0x100002, 這個地址存放的值是"0x100001"(a的邏輯地址值);
int *&q = p; //創(chuàng)建變量q, 給q分配地址也是0x100002, 因此這個地址存放的值還是a的邏輯地址值;
*q = 20; //訪問存放在q變量地址下的值, 獲得了a的地址值, 再訪問一下a的地址值, 修改上面的內(nèi)容為20;
int a = 10; // 給a分配一個內(nèi)存邏輯地址0x100001, 這個地址存放了值10;
int *p = &a; //創(chuàng)建變量p, 給p分配地址0x100002, 這個地址存放的值是"0x100001"(a的邏輯地址值);
int *&q = p; //創(chuàng)建變量q, 給q分配地址也是0x100002, 因此這個地址存放的值還是a的邏輯地址值;
*q = 20; //訪問存放在q變量地址下的值, 獲得了a的地址值, 再訪問一下a的地址值, 修改上面的內(nèi)容為20;
2017-07-10