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)

相关推荐
jiao000011 小时前
数据结构——队列
c语言·数据结构·算法
铁匠匠匠1 小时前
从零开始学数据结构系列之第六章《排序简介》
c语言·数据结构·经验分享·笔记·学习·开源·课程设计
C-SDN花园GGbond1 小时前
【探索数据结构与算法】插入排序:原理、实现与分析(图文详解)
c语言·开发语言·数据结构·排序算法
迷迭所归处2 小时前
C++ —— 关于vector
开发语言·c++·算法
架构文摘JGWZ3 小时前
Java 23 的12 个新特性!!
java·开发语言·学习
leon6253 小时前
优化算法(一)—遗传算法(Genetic Algorithm)附MATLAB程序
开发语言·算法·matlab
Navigator_Z3 小时前
数据结构C //线性表(链表)ADT结构及相关函数
c语言·数据结构·算法·链表
锦亦之22334 小时前
QT+OSG+OSG-earth如何在窗口显示一个地球
开发语言·qt
我是苏苏4 小时前
Web开发:ABP框架2——入门级别的增删改查Demo
java·开发语言
姜太公钓鲸2334 小时前
c++ static(详解)
开发语言·c++