• Linux C语言:多级指针(void指针和const)


    一、多级指针

    • 把一个指向指针变量的指针变量,称为多级指针变量
    • 对于指向处理数据的指针变量称为一级指针变量
    • 指向一级指针变量的指针变量称为二级指针变量

    1、二级指针变量的说明形式

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

    一张图理解二级指针

     2、多级指针的运算

    • 指针变量加1,是向地址大的方向移动一个目标数据
    • 多级指针运算也是以其目标变量为单位进行偏移 
    • int **p;p+1移动一个int *变量所占的内存空间
    • int ***p,p+1移动一个int **所占的内存空间

    3、指针数组 

    • 指针数组也可以用另外一个指针来处理

    有一个一维字符指针数组ps[5]

    1. char *ps[5]= { "Beijing city",
    2. ......
    3. "London city" } ; 

    定义另一个指针变量pps,并且把指针数组的首地址赋予指针pps

    char *ps[5]={......}; char ** pps = ps;

    举个栗子:

    1. #include
    2. #include
    3. int main()
    4. {
    5. char* a[] = { "work","at","alibaba" };
    6. char** pa = a;
    7. pa++;
    8. printf("%s\n", *pa);
    9. return 0;
    10. }

     二、void指针及用法

    1、万能指针 

    • 万能指针其实就是void *类型的指针,而void *指针一般被称为通用指针或叫泛指针。
    • 它是C语言关于纯粹地址的一种约定。当某个指针是void型指针时,所指向的对象不属于任何类型。
    • 因为void指针不属于任何类型,不可以对其进行算术运算,比如自增,编译器不知道其自增需要增加多少。 

    2、void指针 

     一般形式为:
            void * <指针变量名称> ;
    对于void指针,在没有强制类型转换之前,不能进行任何指针的算术运算

    3、万能指针使用规则

    • 使用前必须被初始化
    • 解引用过程必须强制转换

    三、const变量、const指针 

    1、const变量

    • 常量化变量的值
    • 一般说明形式如下:

             const <数据类型> 变量名 = [<表达式>] ;

    • 常量化变量是为了使得变量的值不能修改
    • 变量有const修饰时,若想用指针间接访问变量,指针也要有const修饰。
    • const放在指针声明的什么位置呢?     就近原则:const修饰谁,谁不能变

    2、const修饰指针

    1)常量化指针目标表达式
    • 一般说明形式如下:

            const <数据类型> * <指针变量名称>[= <指针运算表达式>] ;

    • 常量化指针目标是限制通过指针改变其目标的数值 ,但<指针变量>存储的地址值可以修改 
    2)常量化指针变量及其目标表达式
    •  一般说明形式如下:

            const <数据类型> * const <指针变量名> = <指针运算表达式> ;

    • 常量化指针变量及其目标表达式,使得既不可以修改<指针变量>的地址,也不可以通过*<指针变量名称>修改指针所指向变量的值

    四、main函数的参数 

            int main(int argc, const char *argv[]) 

    • argc: 命令行参数的个数
    • argv:为保存命令行参数的字符串指针

            1)其中第0个参数是程序的全名,以后的参数为命令行后面跟的用户输入的参数
            2)argv参数是字符串指针数组,其各元素值为命令行中各字符串的首地址。
            3)指针数组的长度即为参数个数argc。

  • 相关阅读:
    《找对英语学习方法的第一本书》
    ASEMI整流桥UD6KB100,UD6KB100尺寸,UD6KB100特征
    【异常、线程】全网最详细解读
    计算机毕业设计(附源码)python疫情防控管理系统
    大专三年总结2019-2022
    Intel announces Arc Pro A40 and Arc A50 professional desktop GPUs【外媒芯片报道(手工翻译)】
    使用nodejs通过vpn途径去下载图片(如果你自己写了爬虫可以用以下去弄ip池那些)
    Leetcode.树形DP
    Elasticsearch head 连接 阿里云ES
    nodejs+vue+elementui高校师资管理系统开发java python php
  • 原文地址:https://blog.csdn.net/Liu1013216383/article/details/139624412