解释奇怪的指针转换问题

来源:互联网 发布:c语言复合语句格式 编辑:程序博客网 时间:2024/06/05 03:42
#include <stdio.h>int main(){     int ucData[100];     int i = 0;     for(i=0; i<100; ++i)     {        ucData[i] = i;     }     char cOut = *(char*)( (int)ucData + 1 );     int p = (int)ucData;     printf("p:%x\n",p);     printf("ucData:%x\n",ucData);     printf("(int)ucData:%x\n",(int)ucData);     printf("(int)ucData+1:%x\n",(int)ucData+1);     printf("cOut:%d\n",cOut);     return 0;}


需要注意的是(int)ucData,虽然ucData是一个int*型的指针,但是这里是将指针所指向的地址,也就是ucData的地址转化为int型。

再在这之上+1,那么就是地址+1,因此cOut其实是指向了ucData的第二个字节,取值就是0.

char cOut = *(char*)( (int)ucData + 1 );

PS:有碰到这个问题,特别拿出来做个备注,也为了大家碰到这种问题时困惑不已。

原创粉丝点击