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

admin2024-04-03  0

指针的类型:

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

  1. 指针的基本使用:

C语言------------指针,第1张

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

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

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

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

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

  1. 指针引用到数组:

C语言------------指针,第2张

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

C语言------------指针,第3张

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

3 . 指针和二维数组 :

C语言------------指针,第4张

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

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

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

一个是列数组,它的跨度是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);

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

C语言------------指针,第5张

4.指针数组

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

int (*p)[3];

C语言------------指针,第6张

各种指针的定义:

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​ 类型的值。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明原文出处。如若内容造成侵权/违法违规/事实不符,请联系SD编程学习网:675289112@qq.com进行投诉反馈,一经查实,立即删除!