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

C 语言中轻松的指针数组初始化:提示和最佳实践

指针是一个存储另一个变量地址的变量。指针变量的名称必须以“*”符号开头。就像普通变量的情况一样,我们也可以声明一个“指针数组”,其中数组的每个下标保存数组类型的地址。

如何在 C 中初始化指针数组?

指针变量可以在声明时通过将现有变量的地址分配给它来初始化。以下代码片段显示了如何初始化指针 -

<前>09

默认情况下,包括指针变量在内的所有变量都属于“自动存储类”。这意味着指针变量将存储不可预测的垃圾随机内存地址,这可能会导致未定义的行为和程序的潜在风险,例如分段错误错误。因此,如果我们在声明时没有要存储的特定值,则应将其初始化为 NULL。

<前>18

“指针数组”存储每个元素中的地址。数组的类型必须与目标变量的类型匹配。

使用 static 关键字初始化指针数组

还可以使用static关键字初始化一个指针数组,在每个下标中存储“0”。

示例

<前>26

输出

运行代码并检查其输出 -

<前>30

初始化整数指针数组

在这里,我们声明一个整型指针数组并存储三个整型变量的地址。

示例

<前>48

输出

运行代码并检查其输出 -

<前>56

通过直接地址初始化指针数组

我们可以将普通数组的每个元素的地址存储在指针数组的相应元素中。

示例

<前>69

输出

运行代码并检查其输出 -

<前>71

使用基地址遍历数组

当我们获得数组的基地址(在本例中为“&arr[0]”)时,我们可以获得其后续元素的地址,因为指针按数据类型的大小递增。

因此,只要有了基地址(数组的名称与第0个元素的地址相同),我们就可以遍历数组。

示例 1

看看下面的例子 -

<前>88

输出

运行代码并检查其输出 -

<前>98

示例 2:使用指针数组遍历二维数组

在此示例中,我们有一个二维数组。每行第0个元素的地址存储在指针数组中。遍历时,指针数组中每个元素存储的地址,指向对应行的第0个元素,每次递增以获取每行的值。

<前>105

输出

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

<前>113

示例 3

这里我们实际上并不需要指针数组,因为我们可以使用这个 2D 数组的名称作为其基指针,并按行和列递增它以获取给定 2D 数组中的元素 -

<前>128

输出

输出类似于前面的代码 -

<前>132

初始化字符指针数组(字符串)

在 C 编程中,字符串是 char 数据类型的数组。由于数组的名称也代表其第 0 个元素的地址,因此字符串可以声明为 -

<前>145

使用指针表示法,将字符串分配给 char 指针,如下所示: <前>157

然后我们可以声明一个 char 指针数组来存储多个字符串,如下所示 -

<前>164

示例

以下示例有一个 char 指针数组,用于存储计算机语言的名称 -

<前>177

输出

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

<前>184

在此程序中,“langs”是一个指向 10 个字符串数组的指针。因此,如果“langs[0]”指向地址5000,那么“langs + 1”将指向地址5004,该地址存储着指向第二个字符串的指针。

因此,我们还可以使用以下循环变体来打印字符串数组 -

<前>195

动态指针数组的初始化

您可以使用 malloc() 函数以动态方式声明和初始化指针数组。

示例

看看下面的例子 -

<预>200

输出

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

<前>218

您甚至可以要求用户输入并将值分配给数组指针中的元素 -

<前>227

C语言

  1. C# 数据类型与示例:学习 Int |浮动 |双 |字符
  2. switch…case in C (Switch Statement in C) with Examples
  3. C# 预处理器指令
  4. C - 基本语法
  5. 使用 .NET 构建、测试和部署 – 免费、开源、跨平台开发平台
  6. C++ 字符串
  7. C和Java之间的区别
  8. C 变量、常量和文字
  9. C# - 方法
  10. C - 预处理器
  11. C for 循环
  12. C 动态内存分配