空类型指针
malloc
查看底层源码中发现是空类型的指针,空类型的指针可以接收任意类型的指针,但是不能取出指针里的内容,如果要取出内容必须要强转。
1.验证空类型指针,可以接收任意类型指针,但不可以取值
1 2 3 4 5 6 7
| void testVoidPoint() { int a = 100; void *p = &a; printf("%x, %x", &a, p); printf("%d", *p); getchar(); }
|
2.通过强转取值
将值强转成对应的指针类型取出
1 2 3 4 5
| void testVoidPoint2() { int a = 100; void *p = &a; printf("%d", *((int*)(p))); }
|
3.开辟空间,证明指针即是动态数组
1 2 3 4 5 6 7 8 9 10 11
| void testVoidPoint3() { int intSize = sizeof(int); printf("%d\n", intSize); int *p = (int*) malloc(20 * sizeof(int)); for (int i = 0; i < 20; ++i){ p[i] = i; printf("%d,%x\n", &p[i], i); } }
|
4.指针与动态数组的等价比较
1 2 3 4 5 6 7 8 9 10
| void testVoidPoint4() { int intSize = sizeof(int); printf("%d\n", intSize); int *p = (int*) malloc(20 * sizeof(int)); for (int i = 0; i < 20; ++i) { p[i] = i; printf("%d,%x\n", p[i], &p[i]); printf("%d,%x\n", *(p + i), p + i); } }
|
p[i]
等价于 *(p + i)
&p[i]
等价于 p + i