深入理解数组指针与指针数组的区别

yizhihongxing

深入理解数组指针与指针数组的区别

数组指针

数组指针实际上就是指向一个数组的指针。用一句话来描述:数组指针是指向数组的指针变量。

声明数组指针的基本语法:数组类型 * 指针变量名

数组指针的使用

我们可以通过数组指针来处理数组,例如访问数组的某个元素,也可以通过数组指针将数组传递给函数来处理。

在访问数组元素时,可以使用以下的两种方式:

#include <stdio.h>
int main()
{
  int arr[5] = {5, 10, 15, 20, 25};
  int (*ptr)[5];
  ptr = &arr; 

  // 方法 1
  printf("%d ", *(*ptr+2)); // 输出 15

  // 方法 2
  printf("%d ", (*ptr)[2]); // 输出 15

  return 0;
}

上述代码中,首先声明了一个包含五个整数的数组arr,然后声明了一个数组类型为int [5]的指针ptr,并将它指向数组arr的首地址。

  • 方法 1使用了(后称法),通过指针ptr的值找到数组arr的首地址,将它加上2(,即指针偏移两个元素的大小),然后用(前称法)操作符获取指针所指向的元素值,即输出15。

  • 方法 2使用了指针ptr来访问数组元素,也就是先使用括号()来指出类型,然后再访问数组元素arr[2],即输出15。

数组指针与指针数组的区别

数组指针与指针数组的区别主要在于定义方式和指向的对象上。

数组指针是指向数组的指针变量,定义方式是在类型名前面加上*,具体示例如下:

int(*ptr)[5];

指针数组是一个数组,其元素是指针,定义方式是在变量名后面加上[],具体示例如下:

int *ptr[5];

指针数组

指针数组是一个数组,其所有元素均为指针类型,即一个包含多个指针变量的数组。用一句话来描述:指针数组是指多个指针变量组成的数组。

声明指针数组的基本语法:指针类型 * 指针数组变量名[数组长度]

指针数组的使用

例如,我们可以使用指针数组来存储多个字符串。

#include <stdio.h>
int main()
{
  char *colors[6] = { "Red", "Green", "Blue", "White", "Black", "Yellow" };

  for (int i = 0; i < 6; i++)
  {
      printf("%s\n", colors[i]);
  }
  return 0;
}

上述代码中,声明了一个指针数组colors,其中的元素均为指向字符型的指针变量。元素的值为字符串常量,这些字符串常量被编译器存储在只读存储区域(RO)中,因此不能修改。

我们还可以使用指针数组来存储多个函数指针。例如下面的示例:

#include <stdio.h>

int add(int a, int b)
{
    return a + b;
}

int subtract(int a, int b)
{
    return a - b;
}

int main()
{
    int (*operation[2])(int, int) = { add, subtract };
    printf("add (5, 2) = %d\n", operation[0](5, 2));
    printf("subtract (9, 6) = %d\n", operation[1](9, 6));
    return 0;
}

上述代码中,我们声明了一个包含两个函数指针变量的数组operation,其中每个元素都是一个指向具体函数的指针。在main()函数中,我们通过指针数组调用了两个函数。第一个函数是add,参数为5和2,第二个函数是subtract,参数为9和6。我们通过分别调用这两个函数,输出了函数计算结果。

指针数组与数组指针的区别

指针数组与数组指针的区别主要在于定义方式和指向的对象上。

指针数组是一个数组,所有元素的类型均为指针类型,定义方式是在变量名后面加上[],具体示例如下:

int *ptr[5];

数组指针是指向数组的指针变量,定义方式是在类型名前面加上*,具体示例如下:

int (*ptr)[5];

总结

  • 数组指针是指向数组的指针变量,指针变量的类型是指针而不是数组。用于处理数组时,可以通过指针的偏移来进行元素的访问。
  • 指针数组是一个数组,数组元素的类型是指针。用于存储指向不同对象的多个指针变量。
  • 数组指针和指针数组的区别在于数组指针是指向数组的指针变量,指针数组是一个数组,其所有元素均为指针类型。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:深入理解数组指针与指针数组的区别 - Python技术站

(0)
上一篇 2023年6月25日
下一篇 2023年6月25日

相关文章

  • C#创建SQLite控制台应用程序详解

    C#创建SQLite控制台应用程序详解 在本文中,我们将通过两个示例说明如何使用C#语言创建SQLite控制台应用程序,其中一个示例演示如何创建数据库和表格,然后使用C#程序向数据库中插入数据,另一个示例演示如何从数据库中检索数据并将其显示在控制台中。 准备工作 在开始之前,我们需要做一些准备工作: 安装SQLite: 您需要安装SQLite以便使用它的命令…

    other 2023年6月25日
    00
  • 轻松掌握Linux关机重启命令

    下面是轻松掌握Linux关机重启命令的攻略: 1. 关闭Linux系统 在命令行中使用shutdown命令可以用来关闭Linux系统,命令的格式如下: sudo shutdown [option] time 其中,option指定了shutdown的选项,time指定了关机时间。 1.1. 关机选项 -r,重启系统 -h,关机 -c,取消上一次的shutdo…

    other 2023年6月27日
    00
  • cad布局怎么用

    下面是详细讲解 CAD 布局的使用攻略: 什么是 CAD 布局? CAD 布局是一种在 CAD 软件中用于创建和布置多个页面/版面的工具。使用 CAD 布局,可以轻松创建包含多个图纸的设计文件,并设置每个页面的比例、页面大小、边距等参数,精准地布局图纸内容,以及管理每个页面的打印输出。在大型项目中特别有用,例如建筑设计、机械工程、电路设计等领域。 如何使用 …

    其他 2023年4月16日
    00
  • vmware虚拟机中的常用文件介绍

    VMware虚拟机中的常用文件介绍攻略 VMware虚拟机是一种虚拟化技术,可以在一台物理计算机上运行多个虚拟机。在本攻略,我们将介绍VMware虚拟机中的常文件,包括虚拟机配置文件、虚拟磁盘文件、快照文件和虚拟机日文件。 虚拟机配置文件 虚拟机文件是虚拟机的主要配置文件,包含虚拟机的硬件配置、网络配置、操作配置等信息。虚拟机配置文件通常有.vmx扩展名,可…

    other 2023年5月8日
    00
  • Spring Boot 把配置文件和日志文件放到jar外部

    Step 1:创建Spring Boot项目 首先,我们创建一个Spring Boot项目。可以使用Spring Intializr或者自行使用maven创建。这里我们使用Spring Intializr,选择下面的选项: 项目名称:spring-boot-external-config-logs 项目类型:Maven Project 依赖:Spring B…

    other 2023年6月25日
    00
  • C语言基础文件操作方式超全详解建议收藏

    C语言基础文件操作方式超全详解建议收藏 为什么要学习文件操作 在编程中,文件操作是一种比较常见的操作方法。在实际项目中,我们需要与电脑中文件进行交互,比如将一些重要的数据存储到文件中,或者从文件中读取数据作为程序的输入。如果我们没有学会文件操作,那么我们就无法进行这类数据持久化的操作,这会严重影响我们的编程效率和开发质量。因此,学会C语言基础文件操作是非常重…

    other 2023年6月26日
    00
  • mysql中设置默认时间为系统当前时间

    以下是“MySQL中设置默认时间为系统当前时间的完整攻略”,过程中包含两个示例说明的标准Markdown格式文本: MySQL中设置默认时间为系统当前时间 在MySQL中,可以设置默认时间为系统当前时间。以下是设置默认时间的详细步骤: 创建表时设置默认时间。可以在创建表设置默认时间。例如,以下是创建表时设置默认时间的示例: mysql CREATE TABL…

    other 2023年5月10日
    00
  • dos命令for用法详解

    DOS命令FOR用法详解 在DOS命令中,使用FOR命令可以进行循环操作。本文将详细讲解FOR命令的用法,以及两个使用示例。 常见的FOR参数及用法 下面是常见的FOR参数及其用法: 1. FOR /F参数 FOR /F参数可以从文件中读取文本,并且可以按照指定的分隔符和固定的位置提取文本中的数据。语法如下: FOR /F ["options&qu…

    other 2023年6月26日
    00
合作推广
合作推广
分享本页
返回顶部