43.【C语言】指针(重难点)(F)

目录

15.二级指针

*定义

*演示

16.三级以及多级指针

*三级指针的定义

*多级指针的定义

17.指针数组

*定义

*代码

18.指针数组模拟二维数组

往期推荐

15.二级指针

*定义

之前讲的指针全是一级指针

cpp 复制代码
int a = 1;
int *pa = &a;//一级指针

如果写成

cpp 复制代码
int a = 1;
int *pa = &a;//pa是一级指针
int** ppa = &pa;//ppa是二级指针

二级指针定义:指向(存储)一级指针地址的指针

其实在这篇文章已经提前铺垫过了41.【C语言之外】聊聊Cheat Engine官方教程步骤6的思考

*演示

cpp 复制代码
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{
  int a = 1;
  int* pa = &a;//pa是一级指针
  int** ppa = &pa;//ppa是二级指针
  return 0;
}

命名的含义:ppa-->point pa-->point (point pa)

x86环境下,F11逐语句执行,运行到return 0;

打开监视窗口

现从&ppa查到&a

查看内存,输入&ppa

bc f8 8f 00 --倒着写-->00 8f f8 bc-->008ff8bc-->是&pa的结果

pa中存储着a的地址

c8 f8 8f 00--倒着写-->00 8f f8 c8-->是&a的结果

01 00 00 00--倒着写-->00 00 00 01-->是变量a的值

可以想到下面代码打印结果

cpp 复制代码
printf("%d",**ppa);//二级指针需要两次解引用,因此要带两个*

就是a的值:1

16.三级以及多级指针

*三级指针的定义

类比二级指针,可以推出三级指针的定义:指向(存储)二级指针地址的指针(如int*** ppa=&ppa;)

*多级指针的定义

同理推出多级指针定义:n级指针是指向(存储)(n-1)级指针地址的指针

17.指针数组

*定义

回忆整型数组的定义:存放整型的数组

所以指针数组的定义:存放指针(地址)的数组

*代码

cpp 复制代码
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{
  int a = 1;
  int b = 2;
  int c = 3;
  int* arr[] = { &a,&b,&c };

  for (int i = 0; i < 3; i++)
  {
	  printf("%p\n", arr[i]);//打印指针数组
  }
  return 0;
}

DC-D0=C,D0-C4=C-->连续存放

18.指针数组模拟二维数组

*代码

cpp 复制代码
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{
	int arr1[] = { 1,2,3,4 };
	int arr2[] = { 5,6,7,8 };
	int arr3[] = { 9,10,11,12 };
	//数组名即代表数组首元素的地址
    int* arr[] = { arr1,arr2,arr3 };

  for (int i = 0; i < 3; i++)
  {
	  for (int j = 0; j < 4; j++)
	  {
		  printf("%d ", arr[i][j]);
	  }
	  printf("\n");
  }
  return 0;
}

*分析

上方代码并没有创建二维数组,但是却依靠指针数组模拟出二维数组,可以按照二维数组的形式(arr[i][j])来访问

注意:arr[i][j]等同于*(*(arr+i)+j)

(二维数组文章:13.5.【C语言】二维数组)


往期推荐

19.【C语言】指针(重难点)(A)

37.【C语言】指针(重难点)(B)

38.【C语言】指针(重难点)(C)

39.【C语言】指针(重难点)(D)

40.【C语言】指针(重难点)(E)

相关推荐
数据知道9 分钟前
claw-code 源码分析:大型移植的测试哲学——如何用 unittest 门禁守住「诚实未完成」的口碑?
开发语言·python·ai·claude code·claw code
小堃学编程18 分钟前
【项目实战】基于protobuf的发布订阅式消息队列(2)—— 线程池
java·开发语言
每日任务(希望进OD版)24 分钟前
线性DP、区间DP
开发语言·数据结构·c++·算法·动态规划
怨言.25 分钟前
Java内部类详解:从基础概念到实战应用(附案例)
java·开发语言
AC赳赳老秦25 分钟前
OpenClaw image-processing技能实操:批量抠图、图片尺寸调整,适配办公需求
开发语言·前端·人工智能·python·深度学习·机器学习·openclaw
XiYang-DING27 分钟前
【Java】 Java 集合框架
java·开发语言
charlie11451419127 分钟前
嵌入式C++教程实战之Linux下的单片机编程(9):HAL时钟使能 —— 不开时钟,外设就是一坨睡死的硅
linux·开发语言·c++·单片机·嵌入式硬件·c
diving deep32 分钟前
从零构建大模型--实操--搭建python环境
开发语言·python
We་ct33 分钟前
LeetCode 172. 阶乘后的零:从暴力到最优,拆解解题核心
开发语言·前端·javascript·算法·leetcode·typescript
沉淀粉条形变量44 分钟前
rust 单例模式
开发语言·单例模式·rust