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

2024-06-13 02:20
文章标签 语言 linux 指针 const 多级

本文主要是介绍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。

这篇关于Linux C语言:多级指针(void指针和const)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1056023

相关文章

Linux之systemV共享内存方式

《Linux之systemV共享内存方式》:本文主要介绍Linux之systemV共享内存方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、工作原理二、系统调用接口1、申请共享内存(一)key的获取(二)共享内存的申请2、将共享内存段连接到进程地址空间3、将

快速修复一个Panic的Linux内核的技巧

《快速修复一个Panic的Linux内核的技巧》Linux系统中运行了不当的mkinitcpio操作导致内核文件不能正常工作,重启的时候,内核启动中止于Panic状态,该怎么解决这个问题呢?下面我们就... 感谢China编程(www.chinasem.cn)网友 鸢一雨音 的投稿写这篇文章是有原因的。为了配置完

C语言中位操作的实际应用举例

《C语言中位操作的实际应用举例》:本文主要介绍C语言中位操作的实际应用,总结了位操作的使用场景,并指出了需要注意的问题,如可读性、平台依赖性和溢出风险,文中通过代码介绍的非常详细,需要的朋友可以参... 目录1. 嵌入式系统与硬件寄存器操作2. 网络协议解析3. 图像处理与颜色编码4. 高效处理布尔标志集合

Go语言开发实现查询IP信息的MCP服务器

《Go语言开发实现查询IP信息的MCP服务器》随着MCP的快速普及和广泛应用,MCP服务器也层出不穷,本文将详细介绍如何在Go语言中使用go-mcp库来开发一个查询IP信息的MCP... 目录前言mcp-ip-geo 服务器目录结构说明查询 IP 信息功能实现工具实现工具管理查询单个 IP 信息工具的实现服

C 语言中enum枚举的定义和使用小结

《C语言中enum枚举的定义和使用小结》在C语言里,enum(枚举)是一种用户自定义的数据类型,它能够让你创建一组具名的整数常量,下面我会从定义、使用、特性等方面详细介绍enum,感兴趣的朋友一起看... 目录1、引言2、基本定义3、定义枚举变量4、自定义枚举常量的值5、枚举与switch语句结合使用6、枚

Linux命令之firewalld的用法

《Linux命令之firewalld的用法》:本文主要介绍Linux命令之firewalld的用法,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录linux命令之firewalld1、程序包2、启动firewalld3、配置文件4、firewalld规则定义的九大

Linux之计划任务和调度命令at/cron详解

《Linux之计划任务和调度命令at/cron详解》:本文主要介绍Linux之计划任务和调度命令at/cron的使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录linux计划任务和调度命令at/cron一、计划任务二、命令{at}介绍三、命令语法及功能 :at

Linux下如何使用C++获取硬件信息

《Linux下如何使用C++获取硬件信息》这篇文章主要为大家详细介绍了如何使用C++实现获取CPU,主板,磁盘,BIOS信息等硬件信息,文中的示例代码讲解详细,感兴趣的小伙伴可以了解下... 目录方法获取CPU信息:读取"/proc/cpuinfo"文件获取磁盘信息:读取"/proc/diskstats"文

Linux内核参数配置与验证详细指南

《Linux内核参数配置与验证详细指南》在Linux系统运维和性能优化中,内核参数(sysctl)的配置至关重要,本文主要来聊聊如何配置与验证这些Linux内核参数,希望对大家有一定的帮助... 目录1. 引言2. 内核参数的作用3. 如何设置内核参数3.1 临时设置(重启失效)3.2 永久设置(重启仍生效

go 指针接收者和值接收者的区别小结

《go指针接收者和值接收者的区别小结》在Go语言中,值接收者和指针接收者是方法定义中的两种接收者类型,本文主要介绍了go指针接收者和值接收者的区别小结,文中通过示例代码介绍的非常详细,需要的朋友们下... 目录go 指针接收者和值接收者的区别易错点辨析go 指针接收者和值接收者的区别指针接收者和值接收者的