傳給函式形參的實參是作為拷貝傳入,在函式體內改變作為拷貝的實參2是不會影響到傳入的實參1的。
【規則】
1、如果想要通過函式介面改變傳入的數值,那麼需要傳入該數值的指標。
2、如果想要改變傳入的指標所指向的值,那麼需要傳入該指標的指標。總之,需要深一層。
int fun()
int fun1()
【修改方法】
由上層呼叫函式分配好乙個指標空間,然後將該指標傳給fun(int *p)
1、小型別->長型別
將乙個單位元組的資料轉換成兩個位元組的資料,會造成記憶體越界,改寫其他變數的內容(另乙個位元組被改變了)
unsigned
char a = 9;
f((unsigned
short)a) //將乙個單位元組的資料轉換成兩個位元組的資料
//do some things
2、長型別->小型別
兩個有符號整數相加、相乘等都會有溢位的風險!!!!兩個無符號數相加、相乘可能會出現無符號數反轉風險!!!
void fun()
}
如果n等於了int表示的最大值uint_max,那麼n+1將會等於0,那麼會執行calloc(0)。。。。
對於memcpy有規定:void * memcpy ( void * destination, const void * source, size_t num );
num是無符號整數,如果使用者傳入了乙個負數,那麼將會導致解析成乙個巨大的無符號數。
C C 易錯總結
一 分析如下 char tostr int num s i 0 return s 本意為將整數轉化成字元陣列儲存,然後將這個字元陣列返回。經艱苦實踐,發現不能,原因是指標s是區域性變數,當函式返回時s即銷毀,當然不會返回成功了,只能把乙個無意義的位址傳回去。所以正確的處理方法可以這樣。void to...
C C 常用函式易錯點
include void memset void buffer,int ch,size t count 將記憶體中buffer的前count個 位元組的內容全部設定為ch指定的ascii值.經常用來初始化陣列.複製時 以位元組為單位,如果buffer是int long,或者其他型別的指標時,需要注意...
C C 易錯難點筆記01
c 是一門神奇的語言,很多時候你對底層不熟悉,很難知道某些情況下的結果,下面是我不斷積累的疑惑點,這裡將其記錄下來。class a class b public a int tmain int argc,tchar argv 下面語句發生什麼變化。b pb b pa 答 不能覆蓋,派生類重寫基類的虛...