今天看到同事寫的代碼:
char retcode[5];
memset( &retcode, 0x00, sizeof(retcode) );
因為以前沒見過這樣的寫法,心想retcode本身就是指向字符數組的指針,再加個&不是變成指向指向字符數組指針的指針了嗎?結果他告訴我,這樣寫是可以的,而且可以防止retcode改變類型造成的coredump的情況。
帶著懷疑的想法去查了下《C與指針》,還真發現了這種用法。根據書中描述我才知道,這個retcode一般情況下表示的是指向char的
常量指針,只有兩種情況,數組名所表示的不是指針常量:
1、當數組名作為sizeof操作符的操作數時。這時sizeof返回的是整個數組的長度,而不是指向數組的指針的長度;
2、當數組名作為單目操作符&的操作數時。
取一個數組名的地址產生的是一個指向數組的指針(和使用數組名效果相同),而不是指向某個指針常量值的指針。
這么一句memset把兩種情況都用上了。
------------------------------------------------------------------------------
2010.04.26
今天遇到一個問題,在調zlib的compress的函數的時候總是報Z_STREAM_ERROR,半天都沒找到原因,最后發現,我寫了下面的代碼:
Byte* alObuf;
alObuf = (Byte*)calloc(_MAX_ZMG_BUFFER, sizeof(Byte));
memset(&alObuf, 0x00, sizeof(alObuf));
因為自從知道上面的數組memset的寫法以后,就一直習慣在前面加個&。然而,這一次,栽了。。
仔細看,這只是個unsigned char指針,加上了&就完全不知道指哪兒去了。。。
所以,這個寫法,只能用在數組前,千萬別用在指針前。。。另外,這里的sizeof(alObuf)也只是4而已,指針的sizeof。。。數組和指針,別搞混了。
posted on 2010-03-18 19:35
RayRiver 閱讀(476)
評論(0) 編輯 收藏 引用 所屬分類:
C/C++