万能指针
万能指针其实就是void*类型的指针,而void*指针一般被称为通用指针或泛指针
它是C语言关于纯粹地址的一种约定。当某个指针是void型指针时,它指向的对象不属于任何类型
因为void型指针不属于任何类型,不可以对其进行算术运算,比如自增,编译器不知道其自增需要加多少
void指针
一般形式为:void *<指针变量名称>;
对于void指针,在没有进行强制类型转换之前,不能对其进行算术运算
#include <stdio.h>
int main(){
int a = 10;
float b = 3.14;
char c = 'c';
void *p;
p = &a;
printf("int:%d %d\n",a, *(int *)p);
p = &b;
printf("float:%f %f\n",b,*(float *)p);
p = &c;
printf("char:%c %c\n",c,*(char *)p);
return 0;
}
/*
int:10 10
float:3.140000 3.140000
char:c c
*/使用void指针遍历一维数组
#include <stdio.h>
int main(){
int a[] = {1,4,5,2,10,9};
void *p = a;
int i;
for(i = 0;i < sizeof(a) / sizeof(int); i++){
//printf("%d\n",a[i]);
printf("%d\n",*((int *)p + i));
}
return 0;
}
/*
1
4
5
2
10
9
*/使用场景
万能指针充当函数返回值
万能函数充当函数参数