C C 易錯問題分析

2021-07-11 06:53:24 字數 1176 閱讀 4270

傳給函式形參的實參是作為拷貝傳入,在函式體內改變作為拷貝的實參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 答 不能覆蓋,派生類重寫基類的虛...