二級指標的用法最容易犯錯的地方 *號和的優先順序:
int **pp;
int *length; // *length–; 這種寫法也很危險。先取出內容 然後指標後移,而不是像我們想的 取出裡面的內容–;相當於*length; length – ; 而不是讓內容減一
我們想引用乙個一維陣列裡的元素 我們可能會這麼寫*pp[i]
這裡是很多人犯錯的地方,由於中括號優先順序高 ,導致指標指向一塊不屬於我們的空間,這時候程式就會中斷 正確的寫法是(*pp)[i];
下面是乙個簡單的demo
#include
using namespace std;
//簡單方式
//找到第乙個要刪除的數
int findfirstnum(int * p, int
length, int delnum)
}return -1;
}//刪除的方式採用記憶體縮減的方法,刪除乙個就將所申請的記憶體-1
void deletenum(int
**pp, int
*length, int delnum)
*pp = (int
*)realloc(*pp, sizeof(int)*(
*length - 1));
*length -= 1;//不要寫成*length-- }}
}int main()
else
}deletenum(&p, &lenth, 4);
for (int i = 0; i < lenth; i++)
system("pause");
}
位運算子 需要注意的地方
本人第乙個部落格,以後會經常寫 此時的我就像戲台上的老將軍 以免第二次犯同樣的錯誤。因為考研的原因,好久沒有coding了,略感生疏。瘋玩了十幾天,決定拿起書本,紮實地重新看一遍專業書。從開始學習程式設計起,就不是很注重位運算,因為覺得可以用別的方法代替。後來發現有些東西用位運算處理更有效率。這裡主...
C 運算子過載需要注意的地方
有時候自己寫乙個類,需要過載運算子,但對於一些操作符 如 等 可以在類裡寫,也可以在類外寫。那麼 c 編譯器會去怎麼呼叫呢?首先,我們知道,過載 機制可以允許多個函式有相同的函式名,但引數列表必須不同。c 編譯器經過名字改編 name mangling 可以在呼叫時依據所傳實參找到 最符合 的函式實...
過載及運算子過載需要注意的地方
運算子過載 operator overload 是c 的乙個重要的新特性,它使得程式設計師把c 運算子定義擴充套件到運算元是物件的情況.運算子過載的目的是使c 程式更加直觀,更易懂.但這種方便有時候也帶來一些潛在的危險 運算子過載和普通的過載一樣 作用域相同,函式名字相同,但引數不同 引數個數,引數...