在C语言中使用不同指针类型指向相同的内存区域
在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
*/
不明确指明数据类型(整数类型)是否有符号的话,默认为有符号。
评论已关闭