当前位置: 首页> 文旅> 酒店 > b2b典型代表网站_专业网站制作地址_图床外链生成工具_长沙网站推广合作

b2b典型代表网站_专业网站制作地址_图床外链生成工具_长沙网站推广合作

时间:2025/7/9 5:55:58来源:https://blog.csdn.net/fjw12998/article/details/142673748 浏览次数:0次
b2b典型代表网站_专业网站制作地址_图床外链生成工具_长沙网站推广合作

第二章:指针数组和数组指针

1. 指针数组

定义与声明

指针数组是一个包含指针的数组,每个元素都是一个指针。例如,可以创建一个指向字符串的指针数组。

#include <stdio.h>const char* strArray[] = {"Hello", "World", "C Language"};

上面的代码定义了一个包含三个指针的数组,每个指针分别指向一个字符串常量。

示例代码:使用指针数组存储字符串数组

#include <stdio.h>int main() {// 定义一个包含字符串指针的数组const char* strArray[] = {"Hello", "World", "C Language"};// 遍历该指针数组并打印每个字符串for (int i = 0; i < 3; i++) {printf("%s\n", strArray[i]);}return 0;
}

实际应用场景

指针数组在处理字符串数组、动态创建多维数组和处理复杂数据结构时非常有用。例如,在命令行参数解析、数据库记录处理等场景中,指针数组能够提供高效灵活的解决方案。


2. 指向数组的指针

定义与声明

指向数组的指针是一个指针,指向一个数组的第一个元素。例如,一个指向整数数组的指针可以这样定义:

int (*arrayPtr)[10];

这里,arrayPtr 是一个指向包含10个整数的数组的指针。

二维数组与指向二维数组的指针

二维数组是数组的数组,即数组的每个元素本身又是一个数组。指向二维数组的指针可以表示为一个指向指针的指针。

int array[3][4];
int (*ptr)[4];

ptr 是一个指向包含4个整数数组的指针,它可以指向 array 的每一行。

示例代码:二维数组的动态内存分配

动态分配二维数组时,可以使用指针来管理内存。

#include <stdio.h>
#include <stdlib.h>int main() {int rows = 3;int cols = 4;// 动态分配指向指针的数组(用于存储每一行的指针) [1]int **array = (int **)malloc(rows * sizeof(int *)); if (array == NULL) {perror("Malloc failed");return EXIT_FAILURE;}for (int i = 0; i < rows; i++) {array[i] = (int *)malloc(cols * sizeof(int)); // 动态分配每一行的内存 [2]if (array[i] == NULL) {perror("Malloc failed");return EXIT_FAILURE;}}// 初始化数组并打印其内容for (int i = 0; i < rows; i++) {for (int j = 0; j < cols; j++) {array[i][j] = i * cols + j;  // 初始化printf("%d ", array[i][j]);  // 打印每个元素}printf("\n");}// 释放分配的内存for (int i = 0; i < rows; i++) {free(array[i]);}free(array);return 0;
}
  1. 动态分配指向指针的数组(用于存储每一行的指针)

    • int **array:这一部分声明了一个指向int指针的指针。这个指针(array)将用于指向一个指针数组,每个指针将指向一个整数数组的第一行。最终,它将表示一个2D数组。
    • malloc(rows * sizeof(int *)):这部分代码使用了malloc函数来动态分配内存。
    • rows * sizeof(int *):这计算了要分配的总内存字节数。 sizeof(int *) 是指针的大小(通常在32位系统上是4字节,在64位系统上是8字节),rows 表示行数。因此,这行代码为rowsint * 类型的指针分配内存。
    • (int **):[强制类型转换] malloc 返回的是 void * 类型的指针。为了与声明的 int ** 类型匹配,需要进行强制类型转换。这样避免编译器发出警告并增加代码可读性。
    • 总结:这行代码的作用是为一个指针数组分配内存,每个指针将用于指向二维数组的一行。
  2. 动态分配每一行的内存

    • array[i]:这一部分获取了指向二维数组第i行的指针。array 是一个指针数组,每个元素(比如 array[i])是一个 int * 类型的指针,它将指向数组的一行。
    • malloc(cols * sizeof(int)):这部分代码再次使用 malloc 来分配内存。
      • cols * sizeof(int):这里计算了要分配的字节数。sizeof(int) 返回一个整数的大小,cols 是二维数组的列数。因此,这行代码为一行中的所有 cols 个整数分配内存空间。
    • (int *):[强制类型转换] malloc 返回 void *,需要将其转换为 int * 类型,以匹配指针数组元素的类型。
    • 总结:- array[i] 是一个指向 int 类型数组的指针,malloc 函数为每个数组分配足够的内存以存储 cols 个整数。这些数组即二维数组的各行。

在上面的代码中,通过 malloc 动态分配二维数组的内存,并演示了如何初始化和访问该数组的数据。最后,通过调用 free 释放分配的内存,以防止内存泄漏。


关键字:b2b典型代表网站_专业网站制作地址_图床外链生成工具_长沙网站推广合作

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: