一、指针数组
指针数组是一个数组,其元素都是指针类型的变量。换句话说,指针数组存储的是指针变量,这些指针变量可以指向内存中的其它数据。
指针数组在C语言中有许多用途,其中最常见的是用于存储字符串数组。每个指针指向一个字符串,而字符串本身则存储在内存中的不同位置。这种方法允许我们在一个数组中存储多个字符串,并且每个字符串的长度可以不同。
下面是一个简单的示例,演示如何声明和使用指针数组:
#include<stdio.h>
//使用指针数组存储字符串数组
int main()
{
//声明一个指针数组,包含三个指针元素
char* strArray[3];
//初始化数组的每一个元素,使其指向不同的字符串常量
strArray[0] = "Hello";
strArray[1] = "world";
strArray[2] = "!";
for (int i = 0; i < 3; i++)
{
//printf("%s ", strArray[i]);
printf("%s ", *(strArray + i));
}
return 0;
}
在上面的示例中,我们首先声明了一个指针数组strArray,该数组包含了三个指针元素。然后,我们分别将这些指针元素初始化为不同的字符串常量。最后,通过循环遍历指针数组,逐个打印出字符串。
二、 指针数组模拟二维数组
可以使用指针数组来模拟二维数组。在这种情况下,每个指针指向一个一维数组,这些一维数组的长度可以不同。这种方法允许我们创建一个大小不固定的二维数组,每行的长度可以独立地设置。
下面是一个示例,演示如何使用指针数组模拟二维数组:
#include <stdio.h>
#include <stdlib.h>
int main()
{
// 定义一个指针数组,包含三个指针元素
int *array[3];
int numRows = 3;
int numCols[] = {2, 3, 4}; // 每行的列数
// 动态分配内存并初始化指针数组
for (int i = 0; i < numRows; i++)
{
array[i] = (int *)malloc(numCols[i] * sizeof(int));
if (array[i] == NULL)
{
printf("Memory allocation failed.\n");
return -1;
}
// 初始化每行的元素
for (int j = 0; j < numCols[i]; j++)
{
array[i][j] = i * 10 + j; // 每个元素设置为行索引*10 + 列索引
}
}
// 访问和打印二维数组中的元素
for (int i = 0; i < numRows; i++)
{
for (int j = 0; j < numCols[i]; j++)
{
printf("%d ", array[i][j]);
}
printf("\n");
}
// 释放动态分配的内存
for (int i = 0; i < numRows; i++)
{
free(array[i]);
}
return 0;
}
在上面的示例中,我们首先定义了一个指针数组 array
,其中包含了三个指针元素。然后,我们动态分配内存以及初始化每个指针元素,使其指向一维数组。接着,我们使用嵌套的循环访问和打印二维数组中的元素。最后,我们释放了动态分配的内存以避免内存泄漏。
这种方法可以用于创建大小不固定的二维数组,每行的长度可以根据实际需求设置。
更多C语言相关练习请访问:test_c: C语言练习,包括常见语法练习以及小项目练习。 (gitee.com)