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语言