C语言——指针数组

一、指针数组

指针数组是一个数组,其元素都是指针类型的变量。换句话说,指针数组存储的是指针变量,这些指针变量可以指向内存中的其它数据。

指针数组在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)

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值