2013-10-24 28 views
3

*(uint16_t *)"200"返回什么?据我所知,"200"引用了一个指向字符数组的指针,所以指针指向'2'字符,然后通过ascii字符转换为整数,但我不明白最终的*字符所做的是什么。Dereencing a cast

+0

铸造将CHAR阵列指针作为指向一个整数的指针,最后的星号将引用整数指针,并将其指向的值留给您。 –

回答

3

打破复杂的表达式成碎片:

char const* a = "200"; 
uint16_t* b = (uint16_t*)a; 
uint16_t c = *b; 

a是指向字符串文字('2')的初始字符。

当我们通过浇铸获得b,我们说“假装被指向的数据实际上是一个uint16_t(或其阵列)。

当我们解引用b获得c,我们获得” uint16_t在解决b“。

所以,它重新解释前两个字符的字符串文字("20")的(两个字节,16个比特),作为uint16_t

+0

因此,b将二进制数为20的00110010'00110000转换为16位十进制数,即12748? –

+0

@JacobDenson实际上它的12338,假设你的计算机有很大的endian(非常可能),那么字节解释的顺序是相反的。 – this

+2

应该提到的是,如果地址不适合'uint16_t',行为不是由C标准定义的。 –