1. 程式人生 > >checksum += (0x000000FF) & *a++;    以及 *( (unsigned int *)a ) = checksum;  的理解

checksum += (0x000000FF) & *a++;    以及 *( (unsigned int *)a ) = checksum;  的理解

checksum += (0x000000FF) & *a++;     的理解

a = Buf + SPL_HEADER_SIZE;
	for(i = 0, checksum = 0; i < IMG_SIZE - SPL_HEADER_SIZE; i++)  
checksum += (0x000000FF) & *a++;		

//校驗和演算法其實就是需要校驗的記憶體區域中,所有記憶體中的內容【按照位元組為單位來進行相加】,最終相加的和極為校驗和。

因為+=的優先順序排第14,所以可以分步理解如下:

第一步:checksum = checksum+ (0x000000FF) & (*a)

第二步:a += 1;       //相當於指標向後移動了一個單位。

第三步:checksum = checksum+ (0x000000FF) & (*a)

第四步:a += 1;       //相當於指標再一次向後移動了一個單位,前面兩步如此迴圈下去,直到迴圈條件不滿足為止 

*( (unsigned int *)a ) = checksum;     的理解

現將a強制型別轉換為(unsigned int *)型,然後把(unsigned int *)a當做一個整體,也就是一個指向無符號整型的指標變數a。*( (unsigned int *)a )表示這個指向無符號整型的指標變數a所指向的變數。

所以,*( (unsigned int *)a ) = checksum表示的意思是,將檢驗和checksum的值賦給指向無符號整型的指標變數a所指向的變數。

如果把左值與右值比喻成房子與家人,那麼指向無符號整型的指標變數a所指向的變數就代表“房子”, checksum就好比住進房子中的家人。