首页 > 其他分享 >C语言——数组、指针、函数

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

时间:2024-10-26 22:16:03浏览次数:3  
标签:函数 指向 int 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])可以转换为指针,指向数组的第一个元素。
  • 指针数组:可以定义一个数组,其中每个元素是指针类型。
  • 指针数组指针:可以定义一个指针数组,其中每个指针指向一个数组。

指针和函数的组合方式:

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

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

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

标签:函数,指向,int,C语言,数组,函数指针,指针
From: https://blog.csdn.net/zxtzxt12138/article/details/143260547

相关文章

  • 滑动窗口与双指针
    1.定长滑动窗口套路参考:灵神的总结入-更新-出:入:下标为i的元素进入窗口,更新相关统计量。如果i<k−1则重复第一步。更新:更新答案。一般是更新最大值/最小值。出:下标为i−k+1的元素离开窗口,更新相关统计量。for(inti=0;i<nums.size();++i){//1.进入......
  • 实验3 c语言函数应用编程
    实验任务1task1.c1#include<stdio.h>23charscore_to_grade(intscore);//函数声明45intmain(){6intscore;7chargrade;89while(scanf("%d",&score)!=EOF){10grade=score_to_grade(score);//......
  • ts:对象数组的简单使用
    ts中对象数组的简单使用一、主要内容说明二、例子1、源码12、源码1运行效果三、结语四、定位日期一、主要内容说明平常ts创建数组的格式如下:letarray:string[]=["元素1","元素2","元素3","元素3","元素4",---]元素1、元素2、元素3,等这些元素,可以为字符,数字,也可以......
  • 2024-10-26:最长公共后缀查询。用go语言,给定两个字符串数组 wordsContainer 和 wordsQu
    2024-10-26:最长公共后缀查询。用go语言,给定两个字符串数组wordsContainer和wordsQuery,要对每个wordsQuery[i]找到一个与其有最长公共后缀的字符串。如果有多个字符串与wordsQuery[i]有相同的最长公共后缀,则返回在wordsContainer中最早出现的那个。最后,返回一个整数数组a......
  • Vue3中取当前日期并且取当前日期的前10天和后30天。并把每个日期的日放到一个数组里面
    consttoday=newDate();//获取当前日期constdateArray=[];constdayArray=[];//计算前10天for(leti=10;i>0;i--){constpastDate=newDate(today);pastDate.setDate(today.getDate()-i);dateArray.push(......
  • 算法之树状数组详解
    树状数组树状数组(BinaryIndexedTree,简称BIT),也被称为Fenwick树,是一种用于处理数组问题的高效数据结构。它特别适合解决涉及区间查询和更新的问题,尤其是当需要频繁地计算数组的前缀和时。树状数组的核心思想是利用二进制表示法(lowbit函数)来快速定位数组中的区间,并在O(lo......
  • 浙大版《C语言程序设计实验与习题指导(第4版)实验6-6 使用函数验证哥德巴赫猜想
    本题要求实现一个判断素数的简单函数,并利用该函数验证哥德巴赫猜想:任何一个不小于6的偶数均可表示为两个奇素数之和。素数就是只能被1和自身整除的正整数。注意:1不是素数,2是素数。函数接口给定如下intprime(intp);voidGoldbach(intn);其中函数prime当用户传入参数p......
  • C语言数组与函数实践:构建基础版扫雷游戏
         使用C语言中的数组和函数来构建一个简单的扫雷游戏。通过这个项目,你可以练习如何在C语言中使用数组来存储和处理游戏数据,如何使用函数来组织代码并提高代码的可读性和可维护性。        在实现这个项目时,你可以按照以下步骤进行:1、定义游戏数组:使用二维数......
  • C语言:动态内存管理
    目录为什么要有动态内存管理mallocfreecallocrealloc为什么要有动态内存管理内存分为栈区、堆区、静态区,每个区存放的变量如下图:目前我们掌握的内存开辟方法有:创建结构体structs{inti;intc;};创建一些变量:intx;intu[10];charl;还有创建联合等…......
  • C语言实训:销售管理系统<仅供参考>
    问题描述:本代码比较完善,有菜单模块,拥有较高的可操控性和可观性。代码所包含的功能有很多:输入销售数据,计算每人每种产品销售额,按销售额对销售员排序,计算每种产品总销售额,显示销售报表......以下是全部代码:记得点赞加关注喔~#include<stdio.h>#include<stdlib.h>#defi......