当前位置: 首页 > news >正文

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

一、多级指针

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

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

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

一张图理解二级指针

 2、多级指针的运算

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

3、指针数组 

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

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

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

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

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

举个栗子:

#include<stdio.h>
#include<string.h>int main()
{char* a[] = { "work","at","alibaba" };char** pa = a;pa++;printf("%s\n", *pa);return 0;
}

 二、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。

http://www.lryc.cn/news/374614.html

相关文章:

  • MicroPython+ESP32 C3开发上云
  • 动态 SQL
  • 功能强大的多功能文档转换工具Neevia Document Converter Pro 7.5.0.241
  • 从零到一,深入浅出大语言模型的奇妙世界
  • ESP8266发送WOL幻数据包实现电脑远程唤醒
  • 用一个ESP32S3-Zero把有线键盘变为无线
  • Redis 7.x 系列【3】多种连接方式
  • 数据结构(DS)C语言版:学习笔记(4):线性表
  • Linux 命令大全
  • [华为北向网管NCE开发教程(6)消息订阅
  • 2024.6.15 英语六级 经验与复盘
  • 计算机专业的未来展望
  • Shell变量的高级用法
  • 【Python/Pytorch - 网络模型】-- SVD算法
  • 全光万兆时代来临:信而泰如何推动F5G-A(50PONFTTR)技术发展
  • 港科夜闻 | 香港科大与香港科大(广州)合推红鸟跨校园学习计划,共享教学资源,促进港穗学生交流学习...
  • 基于Wireshark实现对FTP的抓包分析
  • Vue54-浏览器的本地存储webStorage
  • Linux下Shell脚本基础知识
  • 爬虫初学篇——看完这些还怕自己入门不了?
  • [数据集][目标检测]减速区域检测数据集VOC+YOLO格式1654张1类别
  • OpenGL3.3_C++_Windows(8)
  • GPU的工作原理
  • Linux常⽤服务器构建-samba
  • 【Java】已解决java.lang.UnsupportedOperationException异常
  • 在ubuntu中恢复误删除的文件
  • Sklearn中逻辑回归建模
  • 【ARM】MDK出现报错error: A\L3903U的解决方法
  • 0018__字体的kerning是什么意思
  • LORA: LOW-RANK ADAPTATION OF LARGE LANGUAGE MODELS