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