void指针:是一种不确实数据类型的指针变量,它可以
通过强制类型转换让该变量指向任何数据的变量
一般形式:void * <指针变量类型>;
对于void指针,在没有强制类型转换之前,不能进行任何指针的算术运算。因为既然 void 是无类型,那么每次算术运算我们就不知道该操作几个字节,例如 char 型操作 sizeof(char) 字节,而 int 则要操作 sizeof(int) 字节。而在 GNU 中则允许,因为在默认情况下,GNU 认为 void * 和 char * 一样
int a[]={2,4,5,6,7,8};
void *p;
p=a;
int i ,n=0;
n=sizeof(a)/sizeof(int);
for(i=0;i<n;i++){
printf("%d\t%d\n",a[i],*((int*)p+i));
}
return 0;
Const修饰指针:
一般形式:const <数据类型> * <指针变量名称> [<指针运算表达示>]
const修饰什么,什么就不可以变
例如:1、const int *p;(此时*p存储的值不可以变,但是p的地址可以变)
2、int * const p;(此时p的地址不可以修改,*p可以修改)
3、const int *const p ;(地址和*p都不可以改变)