2.11 多级指针、void指针及const指针

目录

多级指针及用法

多级指针的运算及实现

多级指针和指针数组

void指针的使用

用void指针遍历数组

const变量

const修饰指针

main函数参数


多级指针及用法

- 把一个指向指针变量的指针变量,称为多级指针变量

- 对于指向处理数据的指针变量称为一个一级指针变量,简称一级指针

- 而把指向一级指针变量的指针变量称为二级指针变量,简称二级指针

- 二级指针变量的说明形式如下

<存储类型><数据类型>**<指针名>;

<数据类型>*  //是目标变量的数据类型

*<指针名>  //*是声明自己也是个指针

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[]){

}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值