亿迅智能制造网
工业4.0先进制造技术信息网站!
首页 | 制造技术 | 制造设备 | 工业物联网 | 工业材料 | 设备保养维修 | 工业编程 |
home  MfgRobots >> 亿迅智能制造网 >  >> Industrial programming >> C语言

掌握 C 语言中的指针和多维数组

在C语言中,数组是存储在连续内存位置的相似类型值的集合。数组(一维或多维)中的每个元素都由一个或多个唯一整数索引标识。

另一方面,指针存储变量的地址。数组中第0个元素的地址是数组的指针。您可以使用“取消引用运算符”来访问指针引用的值。

您可以在 C 中声明一维、二维或多维数组。术语“维度”是指标识集合中元素所需的索引数量。

指针和一维数组

在一维数组中,每个元素都由一个整数标识:

<前>03

这里,数字“1”位于第 0 个索引,“2”位于索引 1,依此类推。

存储第 0 个元素地址的变量是其指针 -

<前>12

简单来说,数组的名称也指向第 0 个元素的地址。所以,你也可以使用这个表达式 -

<前>20

示例

由于指针的值按数据类型的大小递增,因此“x++”将指针移动到数组中的下一个元素。

<前>34

输出

当您运行此代码时,它将产生以下输出 -

<前>42

指针和二维数组

如果说一维数组就像一个元素列表,那么二维数组就像一个表或矩阵。

二维数组中的元素可以被认为是按行和列逻辑排列的。因此,任何元素的位置由两个索引决定,即行号和列号。行索引和列索引都从“0”开始。

<前>51

这样的数组表示为 -

第 0 列 第 1 列 第 2 列 Row0arr[0][0]arr[0][1]arr[0][2]Row1arr[1][0]arr[1][1]arr[1][2]Row2arr[2][0]arr[2][1]arr[2][2]

可以注意到,表格排列只是逻辑表示。编译器分配一个连续字节块。在 C 中,数组分配是以行优先的方式完成的,这意味着元素以行方式读入数组。

在这里,我们声明一个三行四列的二维数组(第一个方括号中的数字始终指行数)为 -

<前>63

编译器将以行顺序为上述二维数组分配内存。假设数组的第一个元素位于地址1000,并且“int”类型的大小为4字节,则数组的元素将获得以下分配的内存位置 -

第 0 行 第 1 行 第 2 行 值123456789101112地址100010041008101210161020102410281032103610401044

我们将使用&运算符的地址将数组num的第一个元素的地址分配给指针ptr。

<前>75

示例 1

如果指针加1,则指针移动到下一个地址。 “34”数组中的所有 12 个元素都可以在循环中访问,如下所示 -

<前>82

输出

当您运行此代码时,它将产生以下输出 -

<前>92

一般来说,数组任何元素的地址可以使用以下公式 -

<前>109

在我们的 34 数组中,

<前>117

可以参考上图,确认“arr[3][4]”的地址为1044。

示例 2

使用取消引用指针来获取该地址处的值。让我们使用这个公式在指针的帮助下遍历数组 -

<前>122

输出

当您运行此代码时,它将产生以下输出 -

<前>136

指针和三维数组

三维数组是二维数组的数组。这样的数组用三个下标声明 -

<前>149

这个数组可以看作是“x”层表格,每个表格有“x”行和“y”列。

3D 数组的一个例子是 -

<前>152

指向 3D 数组的指针可以声明为 -

<前>168

知道数组本身的名称是第 0 个元素的地址,我们可以将 3D 数组的指针写为 -

<前>171

每层“x”行和“y”列占据 -

<前>189

字节数。假设分配给上面声明的 3D 数组“arr”的内存从地址 1000 开始,第二层(“i =1”)从 1000 + (3 3) 4 =1036 字节位置开始。

<前>199

如果 JMAX 为行数,KMAX 为列数,则第 1 个切片的第 0 行第 0 列元素的地址为 -

<前>204

获取第 i 个切片第 j 行第 k 列的元素值的公式可以为 -

<前>212

示例:使用指针取消引用打印 3D 数组

让我们使用这个公式在指针解引用的帮助下打印 3D 数组 -

<前>222

输出

当您运行此代码时,它将产生以下输出 -

<前>230

一般来说,使用指针访问数组与使用下标表示访问数组非常相似。两者的主要区别在于数组的下标声明静态分配内存,而我们可以使用指针动态分配内存。

要将多维数组传递给函数,您需要使用指针而不是下标。然而,使用下标数组比使用指针更方便,这对于新学习者来说可能很困难。


C语言

  1. C - 字符串
  2. C - 数据类型
  3. C 语言中轻松的指针数组初始化:提示和最佳实践
  4. C - 存储类
  5. C++ 基本输入/输出
  6. 什么是 C 编程语言?基础知识、简介、历史
  7. C++ 异常处理:Try、Catch、throw 示例
  8. C 结构体和指针
  9. C 存储类
  10. 如何从 C++ 函数传递和返回对象?
  11. Guru99:综合在线教程和商业软件评论
  12. C 中的字符串:如何声明变量、初始化、打印、示例