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)

相关推荐
liuyao_xianhui22 分钟前
优选算法_最小基因变化_bfs_C++
java·开发语言·数据结构·c++·算法·哈希算法·宽度优先
做一个AK梦23 分钟前
计算机系统概论知识点(软件设计师)
java·开发语言
AI+程序员在路上30 分钟前
Linux C 条件变量阻塞线程用法:等待时CPU占用率为0
linux·运维·c语言
jimy135 分钟前
C语言实现-----面向对象编程
c语言·数据结构
東雪木41 分钟前
Java学习——一访问修饰符(public/protected/default/private)的权限控制本质
java·开发语言·学习·java面试
cch89181 小时前
易语言与C++:编程语言终极对决
开发语言·c++
不爱吃糖的程序媛1 小时前
鸿蒙PC tiny-AES-c三方库适配实践
c语言·华为·harmonyos
HABuo1 小时前
【linux线程(三)】生产者消费者模型(条件变量阻塞队列版本、信号量环形队列版本)详细剖析
linux·运维·服务器·c语言·c++·ubuntu·centos
bestblueheart1 小时前
C语言怎么学?系统学习路线图分享
c语言·指针·计算机基础·学习路线·编程思想
shark22222221 小时前
Python 爬虫实战案例 - 获取社交平台事件热度并进行影响分析
开发语言·爬虫·python