0x01.函数指针
c
void test(const char* str)
{
printf("%s\n", str);
}
int main()
{
void (*pf)(const char*) = test;//pf是函数指针变量
void (*pfarr[10])(const char*);//pfarr是存放函数指针的数组
void (*(*p)[10])(const char*) = &pfarr;//p是指向函数指针数组的指针
return 0;
}
0x02.sizeof
1.用法
c
int arr[5]={0};
sizeof(arr);
sizeof arr;
2.注意点
sizeof是在编译阶段判断了括号里的类型为short,所以第一个答案是4,判断完类型后就不进行括号里的运算了,最后输出的结果依旧是4.
0x03.笔试题
1.
c
//程序的结果是什么?
int main()
{
int a[5] = { 1, 2, 3, 4, 5 };
int* ptr = (int*)(&a + 1);
printf("%d,%d", *(a + 1), *(ptr - 1));
return 0;
}
2.
c
int main()
{
int a[4] = { 1, 2, 3, 4 };
int *ptr1 = (int *)(&a + 1);
int *ptr2 = (int *)((int)a + 1);
printf( "%x,%x", ptr1[-1], *ptr2);//%x位16进制
return 0;
}
3.
c
int main()
{
int a[5][5];
int(*p)[4];
p = a;
printf( "%p,%d\n", &p[4][2] - &a[4][2], &p[4][2] - &a[4][2]);
return 0;
}