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

一、多级指针

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

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

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

一张图理解二级指针

2、多级指针的运算

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

3、指针数组

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

有一个一维字符指针数组ps5

cs 复制代码
char *ps[5]= { "Beijing city",
......
"London city" } ; 

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

cs 复制代码
char *ps[5]={......}; char ** pps = ps;

举个栗子:

cs 复制代码
#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。

相关推荐
冬夜戏雪15 分钟前
agent的trace 和eval
开发语言·前端·javascript
Sagittarius_A*19 分钟前
Burst Lab | PHP 审计 13|反序列化(三):POP 链构造与 Gadget Chain 分析
开发语言·web安全·php·代码审计·反序列化
职场的momo40 分钟前
11个后端与AI岗位同时开放:Java、网关、推理优化怎么匹配
java·开发语言·人工智能
蓝速科技1 小时前
蓝速科技丨新旧楼宇混杂场景下会议室预约门牌屏一体化改造方案
开发语言·科技·php
梦想的旅途21 小时前
Python实现企业微信文本消息发送
开发语言·python·企业微信
大鹏说大话2 小时前
美业微信会员系统哪个好
开发语言
程序员与背包客_CoderZ3 小时前
高性能分布式KV存储引擎RocksDB入门与C/C++编码实战
c语言·开发语言·数据库·c++·分布式·分布式数据库·rocksdb
钱栈up3 小时前
Mac 开发机一键发版不用切环境:我这样改造了团队的后端部署脚本Maven编译卡住20分钟?我靠两步定位到2处隐蔽编译错误
开发语言·python·macos
william_yangshun3 小时前
【大模型部署实战】kimi-k3-in-c 中文版:用 176KB 纯 C99 引擎在 CPU 上跑 Kimi K3 上手指南
c语言·开发语言
Sagittarius_A*3 小时前
Burst Lab | PHP 审计 14|反序列化(四):字符串逃逸与绕过技巧
开发语言·安全·php·web·反序列化