void类型指针:
- 任何指针都可以赋值给void指针
- void指针赋值给其它类型指针时都必须经过类型转换
- void转换前不能参与指针运算,除非转换
- 本质:void指针只知道指向变量/对象的起始地址,却不能知道它们占几个字节
指向常量的指针:
const int *p1 = &a,不能通过p1改变所指的对象,可以改变指针本身的值
指针类型的常量:
int *const p2 = &a,可以通过p1改变所指的对象,不能改变指针本身的值
- const int *p:就是指向常量的指针
- int const *p:根本不存在const*运算,所以const是修饰前面的int,等同于1!
- int *const p:就是指针类型的常量
- int *p[4]:指针数组,有四个元素,每个元素都是整型指针
- int (*p)[4]:p为指向4个元素一维整形数组的指针变量
- *(int*)p:(int*)是个强制转换,就是将p转换成指向int的指针(一般来讲这里的p都是void型)
- x = *p++:指针移动
- x = (*p)++:指针所指的元素+1
#include<stdio.h>
int main(void)
{
char k = 'k';
int q = 5, q1 = 4;
void *p = &q;
printf("%d\n", *(int*)p);
p = &k;
printf("%c\n", *(char*)p);
int const *p1 = &q1;
printf("%d\n", *p1);
p = nullptr; /*C/C++的NULL宏是个被有很多潜在BUG的宏,因为有的库把其定义成整数0,有的定义成(void*),在C++的时代,这就会引发很多问题*/
/*C++11使用nullptr关键字,是表达更准确,类型安全的空指针*/
return 0;
}