void指针
- void指针是一种不确定数据类型的指针变量,它可以通过强制类型转换让改变量指向任何数据类型的变量。
- 一般形式为:void *<指针变量名称>;
对于void指针,在没有强制转换类型之前,不能进行任何指针的算术运算。
编程练习
#include<stdio.h>
int main()
{
int m = 10;
double n = 3.14;
void * p,*q;
//赋值给void *类型指针前需要强制转换转换为void *类型
p = (void *) &m;
//打印数据时需要将void *类型指针按照所打印数据的类型进行相对应的强制转换
printf("%d %d\n",m,*(int *)p);
q = (void *)&n;
printf("%.2f %.2f\n",n,*(double *)q);
return 0;
}
运行结果:
10 10
3.14 3.14
例:使用void指针遍历以为数组
#include<stdio.h>
int main()
{
int arr[] = {1,2,3,4,5,6};
void * p;
int i ,n;
p = arr;
n = sizeof(arr)/sizeof(int);
for(i = 0;i < n;i++)
{
printf("%d",*((int *)p + i));
}
puts("");
return 0;
}
运行结果:
123456
const变量
常量化变量的值
一般形式说明:
- const <数据类型>变量名 = [<表达式>];
- 常量化变量时为了使得变量的值不能修改
- 变量由const修饰时,若想用指针间接访问变量,指针也要有const修饰。const可以放在指针声明两边,但用法不同
const修饰指针
常量化指针目标表达式
- 一般说明形式如下:
const<数据类型>*<指针变量名称>[=<指针运算表达式>];
常量化指针目标时限制通过指针改变其目标的数值,但<指针变量>存储的地址值可以修改。
常量化指针变量
一般说明形式如下:
<数据类型>*const<指针变量名称>[=<指针运算表达式>];
使得<指针变量>存储地址值不能改变,但可以通过 * <指针变量名称>可以修改指针所指向变量的数值
总结一句话就是:const修饰谁,谁不能变。
例:
#include<stdio.h>
int main()
{
int a = 6;
const int * p;
int *const q;
p = &a;
//(*p)++; 会报错,const int 修饰的是指针变量p的目标是const型常量
//q = &a; 同样会报错,const修饰的是指针变量q地址是const类型的常量,地址值不能改变
*q = 10;
return 0;
}
常量化指针变量及目标表达式
一般说明形式:
- const<数据类型>*const<指针变量名> = <指针运算表达式>;
- 常量化指针变量及其目标表达式,使得既不可以修改<指针变量>的地址,也不可以通过*<指针变量名称>修改指针所指向变量的值。