C语言------------指针

指针的类型:

指针 : 在学习指针之前,要有一个认知,那就是指针 == 地址;

  1. 指针的基本使用:

这里要注意三点:1.*标识符—————只产生在指针变量定义或声明的时候;

2.指针的类型要和被赋值的类型一致;

3. *p = *(p) 这2个的意思是一样的;

在scanf中,不能使用指针进行;

上面的是最基本的指针定义和使用;

  1. 指针引用到数组:

和第一个的一样;差别在于把一维数组名来传参,和下面的函数封装一样:

简单来说,就是把之前的数组名用指针的形式来写

3 . 指针和二维数组 :

二维数组在指针里面,要明白的就只有两点 “是偏移了多少”“怎么表达”

第一个问题:偏移了多少?

在二维数组里面,又可以分成两个一维数组,分别是以数组命名为的一维数组,数组里面的元素又为数组 ; 即父数组

一个是列数组,它的跨度是4个字节; 即子数组;

a + 1 ? 是偏移1个行,就是a[0] 到a[1];

a[0] + 1 ? 是偏移了1个数,就是它旁边的,比喻:a[0][0] 到 a[0][1];

  1. 函数数组 :

顾名思义,就是把函数名代替成指针;

函数指针:

  • 函数指针是指向函数的指针变量。它存储的是函数的地址,可以用来调用函数。
  • 函数指针的声明类似于函数声明,只是将函数名替换为指针变量名,并在前面加上 *​。
  • 函数指针的使用需要先声明一个函数指针变量,然后将函数的地址赋给它,最后通过函数指针来调用函数。
  • void (*p)(); // 声明一个函数指针变量p = functionName; // 将函数的地址赋给指针变量p(); // 通过函数指针调用函数

int (*p)(int ,int);

这个是函数指针的书写方式;

4.指针数组

定义一个指针,指向一个数组;

int (*p)[3];

各种指针的定义:

1,一个整型数:int a;

2,一个指向整型数的指针:int *a;

**3,一个指向指针的指针,他指向的指针指向一个整型数:int a;

4,一个有10个整型数的数组:int a[10];

5,一个有10个指针的数组,每个指针指向一个整型数:int *a[10];

6,一个指向有10个整型数的数组的指针:

int (*a)[10];

7,一个指向指针的指针,被指向的指针指向一个有10个整型数的数组:

int (**a)[10];

8,一个指向数组的指针,该数组有10个整形指针:

int *(*a)[10];

9,一个指向函数的指针,该函数有一个整形参数并返回一个整型数:

int (*a)(int);

10,一个有10个指针的数组,每个指针指向一个函数,该函数有一个整形参数并返回一个整型数:

int (*a[10])(int);

11,一个函数的指针,指向的函数的类型是有两个整形参数并且返回一个函数指针的函数,返回的函数指针指向有一个整形参数且返回整型数的函数:

int*((*a)(int int))(int);

这个声明 int(*(*a)(int,int))(int);​ 是C语言中的一个相对复杂的函数指针声明。要理解它,我们可以逐步拆解它。

首先,我们从里到外、从左到右地分析这个声明。

  1. 最内层的括号 (*a)(int,int)​: 这部分表示 a​ 是一个指向函数的指针,这个函数接受两个 int​ 类型的参数。
  2. 中间的 \*​: 这个星号表示函数 a​ 所指向的函数返回的是一个指针。
  3. 最外层的括号 int(* ... )(int)​: 这部分描述了上一步中提到的指针所指向的内容。它表示这个指针指向一个函数,这个函数接受一个 int​ 类型的参数,并返回一个 int​ 类型的值。

综上,整个声明 int(*(*a)(int,int))(int);​ 可以理解为:

  • ​a​ 是一个指针,指向一个函数。
  • 这个函数接受两个 int​ 类型的参数。
  • 这个函数返回一个指针,这个指针指向另一个函数。
  • 这个被返回的函数接受一个 int​ 类型的参数,并返回一个 int​ 类型的值。

相关推荐

  1. C语言指针——野指针

    2024-04-03 15:48:01       62 阅读
  2. C语言——二级指针

    2024-04-03 15:48:01       58 阅读
  3. C语言 数组指针

    2024-04-03 15:48:01       67 阅读
  4. C语言指针3

    2024-04-03 15:48:01       56 阅读
  5. C语言指针2

    2024-04-03 15:48:01       53 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-04-03 15:48:01       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-04-03 15:48:01       100 阅读
  3. 在Django里面运行非项目文件

    2024-04-03 15:48:01       82 阅读
  4. Python语言-面向对象

    2024-04-03 15:48:01       91 阅读

热门阅读

  1. rust实现希尔排序算法

    2024-04-03 15:48:01       32 阅读
  2. 七彩云转码系统v12.8二开正式版发布

    2024-04-03 15:48:01       35 阅读
  3. 宝塔面板CentOS Stream 8 x86 下如何安装openlitespeed

    2024-04-03 15:48:01       35 阅读
  4. 【Python BUG】局域网内远程连接mysql错误:1130

    2024-04-03 15:48:01       28 阅读
  5. AI大模型学习的理论基础

    2024-04-03 15:48:01       35 阅读
  6. 26.活锁、饥饿锁

    2024-04-03 15:48:01       32 阅读
  7. JVM为什么使用元空间替换了永久代

    2024-04-03 15:48:01       32 阅读