在C语言中使用不同指针类型指向相同的内存区域

    /*
    int pint[10]:
    pint->0C<-pchar
          01
          00
          00
    *pint为256+12=268   *pchar为12,*(pchar+1)为1 
    */
    char *pchar;
    int *pint;
    pchar=(char *)malloc(10*sizeof(int));   
    pint=(int *)pchar;

    pint[0]=0x010C;
    printf("%d,%d,%d\n",pint[0],*pchar,*(pchar+1));
    /*输出:
    268,12,1
    */

把第一个字节的高位置1,其它位也置1,使用 unsigned char* 输出为255,

    unsigned char *pchar;
    int *pint;
    pchar=(char *)malloc(10*sizeof(int));   
    pint=(int *)pchar;

    pint[0]=0x01FF;
    printf("%d,%d,%d\n",pint[0],*pchar,*(pchar+1));
    /*输出:
    511,255,1
    */

  把第一个字节的高位置1,其它位也置1,使用 char* 输出为-1,说明,char为默认的有符号类型,即:signed char

    unsigned char *pchar;
    int *pint;
    pchar=(char *)malloc(10*sizeof(int));   
    pint=(int *)pchar;

    pint[0]=0x01FF;
    printf("%d,%d,%d\n",pint[0],*pchar,*(pchar+1));
    /*输出:
    511,-1,1
    */

  不明确指明数据类型(整数类型)是否有符号的话,默认为有符号。

标签: C程序设计, 指针, 示例

评论已关闭