1.下面的输出结果为多少?
int main(int argc, const char *argv[])
{
double a[4][4];
double (*p)[3];
p = a;
printf("%d\n", &p[3][1]-&a[3][1]);
return 0;
}
答
-3
2、求下列程序的输出结果
int main(int argc, const char *argv[])
{
int a[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12};
int *p[4], i;
for(i=0; i<4; i++){
p[i] = &a[i*3];
}
printf("%d\n", p[3][2]);
return 0;
}
答
12
3.有如下封装,若x.a = 0x22334455,则x.u.b1、x.u.b2、x.u.b3的值分别是多少?
union{
int a;
struct{
char b1;
short b2;
char b3;
}u;
}x;
答
55 2233 0
注:结构体对齐,char b1在内存中占2字节(0x4455),但是实际只读了1字节
4、以下程序的输出结果为多少?
int main(int argc, const char *argv[])
{
char array[12] = {0x01, 0x02, 0x03, 0x04, 0x05,0x06, 0x07, 0x08};
short *pshort = (short *)array;
int *pint = (int *)array;
int64 *pint64 = (int64 *)array; //int64是type定义出来长度为64bit整型变量
printf("%#x,%#x,%#x,%#x", *pshort, *(pshort+2), *pint64, *(pint+2));
return 0;
}
答
0x201,0x605,0x807060504030201,0