当前位置: 首页 > article >正文

C语言——数组、指针、函数

目录

1、数组、指针、函数

2、数组指针及指针数组

2.1、数组指针

2.2、指针数组

2.3、区别

3、指针函数与函数指针

3.1、指针函数

3.2、函数指针

3.3、区别

4、所有组合


1、数组、指针、函数

        在前面我们已经学习了数组、指针以及函数,看起来都没有难的地方,我自认为呢也掌握的比较好,直到我发现,这些东西可以打组合拳

2、数组指针及指针数组

2.1、数组指针

顾名思义,数组指针就是指向一个数组的指针,数组指针是一个指针,它指向一个数组。数组指针的声明方式是:type *arrayName;,其中type是数组的数据类型,arrayName是数组指针的名称。

例如:int *arrPtr;声明了一个名为arrPtr的整数数组指针。

数组指针可以用来访问数组中的每个元素。例如:arrPtr[i]访问数组指针arrPtr中的第i个元素。

2.2、指针数组

指针数组是一个数组,其中每个元素都是一个指针。指针数组的声明方式是:type *arrayName[];,其中type是指针所指向的数据类型,arrayName是指针数组的名称。

例如:int *ptrArray[5];声明了一个名为ptrArray的指针数组,其中每个元素都是一个整数指针。

指针数组的元素可以是同一个类型的指针,也可以是不同的类型的指针。例如:int *ptrArray1[5];char *ptrArray2[5];都是指针数组,但它们的元素类型不同。

2.3、区别

需要注意的是,数组指针和指针数组之间的区别在于,数组指针是指向一个数组,而指针数组是一个数组,其中每个元素都是一个指针。

int arr[5] = {1, 2, 3, 4, 5};
int *arrPtr = arr; // 数组指针
int *ptrArray[5]; // 指针数组

for (int i = 0; i < 5; i++) {
    ptrArray[i] = &arr[i]; // 指针数组的元素是数组中的每个元素的地址
}

在上面的代码中,arrPtr是一个数组指针,它指向数组arrptrArray是一个指针数组,其中每个元素都是数组arr中的每个元素的地址。 

3、指针函数与函数指针

3.1、指针函数

  • 定义: 其返回值类型是指针类型,例如 int *func(int a, int b); 声明了一个名为 func 的指针函数,它接收两个整型参数,并返回一个指向整型的指针。
  • 作用: 通常用于返回动态分配的内存地址,或者返回指向某个数据结构的指针。
  • 示例:
  • int *findMax(int arr[], int size) {
      int *maxPtr = arr; // 指向数组第一个元素
      for (int i = 1; i < size; i++) {
        if (arr[i] > *maxPtr) {
          maxPtr = &arr[i]; // 指向最大值元素
        }
      }
      return maxPtr;
    }

3.2、函数指针

  • 定义: 它是一个指向函数的指针,可以用来调用函数。 例如 int (*funcPtr)(int, int); 声明了一个名为 funcPtr 的函数指针,它指向一个接收两个整型参数并返回整型的函数。
  • 作用: 可以实现回调函数、函数表等功能,提高代码的灵活性和可扩展性。
  • 示例:
  • int add(int a, int b) { return a + b; }
    int subtract(int a, int b) { return a - b; }
    
    int main() {
      int (*operation)(int, int); // 函数指针
    
      operation = add;
      int sum = operation(5, 3); // 调用add函数
    
      operation = subtract;
      int diff = operation(5, 3); // 调用subtract函数
    
      return 0;
    }

3.3、区别

总而言之,指针函数是返回指针的函数,函数指针是指向函数的指针。 记住它们的关键在于理解函数声明中星号 * 的位置:在函数名之前表示函数指针,在函数名之后表示指针函数。

4、所有组合

总而言之,组合呢我们只需要认清具体的类型,知道数据的属性,就可以知道是怎么使用的了

指针和数组的组合方式:

  • 数组指针:数组名(如int arr[5])可以转换为指针,指向数组的第一个元素。
  • 指针数组:可以定义一个数组,其中每个元素是指针类型。
  • 指针数组指针:可以定义一个指针数组,其中每个指针指向一个数组。

指针和函数的组合方式:

  • 函数指针:可以定义一个指针,指向函数。
  • 函数返回指针:函数可以返回指针类型的值。
  • 指针作为函数参数:可以将指针类型的变量作为函数参数。

指针、函数和数组的组合方式:

  • 函数返回指针数组:函数可以返回一个指针数组。
  • 函数指针数组:可以定义一个指针数组,其中每个指针指向一个函数。
  • 指针函数返回数组:函数可以返回一个数组,并将其作为指针返回。

http://www.kler.cn/a/370682.html

相关文章:

  • Pytorch|YOLO
  • 粒子群优化 (PSO, Particle Swarm Optimization) 算法详解及案例分析
  • C#表达式和运算符
  • 深入理解 Entity、VO、QO、DTO 的区别及其在 MVC 架构中的应用
  • C++ 的 CTAD 与推断指示(Deduction Guides)
  • Web3D交互展示:重塑产品展示的新维度
  • 外媒软文宣发:海外发稿-英国金融时报FT-大舍传媒
  • 总结性标题:高效导入文本数据,探索 MySQL 与 Java 的最佳实践
  • 【矩阵理论常见符号说明】
  • echarts自适应浏览器缩放代码
  • Redis与MySQL双写一致性的缓存模式
  • LeetCode 热题 100 之链表2
  • 三款计算服务器配置→如何选择科学计算服务器?
  • C++第八讲:STL--stack和queue的使用及模拟实现
  • 基于现代 C++17 的模块化视频质量诊断处理流程设计
  • Python入门:学会Python装饰器让你的代码如虎添翼!(Python如何不改动原有函数代码添加一些额外的功能)
  • 嵌入式linux系统中实现MPU6050的控制方法
  • Python OpenCV图像复原
  • HCIP 路由控制
  • GRE VPN(H3C)
  • node.js学习Day2
  • asp.net WebForm GridView高级应用
  • 精选免费剪辑软件,为你的视频创作添彩
  • 排序(一)插入排序,希尔排序,选择排序,堆排序,冒泡排序
  • Redis Bitmap介绍和使用场景
  • 《链表篇》---环形链表II(返回节点)