目录
多级指针及用法
- 把一个指向指针变量的指针变量,称为多级指针变量
- 对于指向处理数据的指针变量称为一个一级指针变量,简称一级指针
- 而把指向一级指针变量的指针变量称为二级指针变量,简称二级指针
- 二级指针变量的说明形式如下
<存储类型><数据类型>**<指针名>;
<数据类型>* //是目标变量的数据类型
*<指针名> //*是声明自己也是个指针
int * * q;//目标类型 * 变量名;
int m=10;
int *p;
int **q;
p=&m;
q=&p;
m = *p=**q;
多级指针的运算及实现
多级指针的运算
- 指针变量加1,是向地址大的方向移动一个目标数据。类似的道理,多级指针运算也是以其目标变量为单位进行偏移
- 比如,int **p;p+1移动一个int*变量所占的内存空间。再比如int ***p,p+1移动一个int**所占的内存空间
- 指针数组也可以用另外一个指针来处理
多级指针和指针数组
void指针的使用
void指针是一种不确定数据类型的指针变量,它可以通过强制类型转换让该变量指向任何数据类型的变量
一般形式为:void*<指针变量名称>;
对于void指针,在没有强制类型转换之前,不能进行任何指针的算数运算
#include <stdio.h>
int main(){
int m=10;
double n=3.14;
void *p,*q;
p=(void*)&m; //可以隐式转换,写成 p = &m; ,int类型转换成void类型
printf("%d %d",m,*(int *)p); //赋值时可以隐式转换,使用时必须强制转换
q=(void*)&n;
printf("%lf %lf",n,*(double *)q);
return 0;
}
用void指针遍历数组
在很多库函数或系统调用时,参数中都是void指针,所有用到void的地方,都是想说明,void的位置,都可以强制转换成客户需要的类型,如动态内存的管理、快速排序、创建线程的一些参数等都有用到void指针,可以使功能应用更广泛
const变量
常量化变量的值
一般说明形式如下
const<数据类型>变量名=[<表达式>]
常量化变量是为了使得变量的值不能修改
变量有const修饰时,若想用指针间接访问变量,指针也要有const修饰。
const修饰指针
常量化指针目标表达式
一般说明形式如下:
const<数据类型>*<指针变量名称>=[<指针运算表达式>];
常量化指针目标是限制通过指针改变其目标的数值,但<指针变量>存储的地址值可以修改
int m=10;
const int *p;
[const 放*前,限制不能通过指针改目标,但可以修改指针内地址]
int * const q = &m;
[const放*后,此处修饰指针,所以指针不能重新赋值。但可以通过指针修改目标]
// (*p)++;error;因为有const,不能通过指针改变其目标的数值
// p = &m; right;
// q = &m; error;
// *q = 20; right
[修饰谁,谁不能变]
main函数参数
main函数标准原型
int main(int argc,const char * argv[]){
}