面试会问道如何不用sizeof判断系统是多少位的
思路:
1、因为可能会判断系统是64位的,所以我们需要采用16进制来表示,
那么此刻地址应该是16个十六进制+结束符‘\0’,总共17位。
这里我们可以考虑用一个char buff[17]的数组来存储。
char buff[17];
2、定义一个char类型的指针,让其指向0号地址单元,此时p的值为0x0000(16位系统)或0x00000000(32位系统)
或者指向一个 -1(0xffff…)的地址记得强转下(char*)0 或者(char*)-1。
char * p = (char *)-1;
3、把指针p按地址的打印方式,格式化到buff中
sprintf_s(buff, “%p”, p);
4、调用strlen函数求得buff中字符个数,即p对应十六进制的字符个数,乘以 4 就可以得到自己的系统位数了。
printf(“System is %d bit.\n”, strlen(buf) * 4);
上菜:
#include <stdio.h>
#include <string.h>
int main(int argc, char *argv[])
{
char buf[17];
char * p = (char *)-1;
sprintf_s(buf, "%p", p);
printf("System is %d bit.\n", strlen(buf) * 4);
}