例子: int *p = 10; //这会产生一个警告,提示左右类型不一致
//因为 p 是指针变量,存放的是地址。而10是一个整数常量
而: int *p = (int *)10 //强制转换成同一类型就可以消除警告
//强制类型转换,10强制转换成了一个地址
那么此时: p 的地址就是 10 ,相当于我们自己给他指定了一个地址,而不是系统自动分配的地址
此时,如果强制转换后的你还想 printf 出 p 的内容(printf("%d",*p)),那么还会段错误
为什么呢?
因为它是一个野指针,虽然我们给了一个地址10,但是并没有对指针进行初始化,没有指向一个具体的内存空间,我们没有权限去读写里面的数据
正确的应该是:
int a = 10;
int *p ;
p = &a; //指针p 指向变量 a 的地址
printf("%d",*p); //输出 p 指向的地址 a 里面的内容
这样才可以对指针 p 的内容进行访问。