【C语言基础入门】二级指针、一维数组与指针、二维数组与指针

简介: 【C语言基础入门】二级指针、一维数组与指针、二维数组与指针

前言


在学习C语言的过程中,理解指针的概念是非常重要的。指针提供了一种直接访问内存地址的方式,使得我们可以更加灵活地管理数据和内存。在本文中,我们将介绍C语言中的二级指针、一维数组与指针,并通过通俗易懂的语言和示例代码来帮助读者理解这些概念。


一. 二级指针


1.1 二级指针是什么?

二级指针是指指向指针的指针。用更简单的话来说,就像你有一张地图,上面有一个标记,这个标记实际上是指向另一张地图的指针。你实际上有两层地图,一层指向另一层。


1.2 二级指针使用示例

#include <stdio.h>
int main() {
    int num = 42;
    int *ptr1 = &num;   // 一级指针,指向整数
    int **ptr2 = &ptr1; // 二级指针,指向指针的指针
    printf("Value of num: %d\n", **ptr2);
    return 0;
}


c1a6dd49d3d74745822f1da596cac88b.png

在这个示例中,ptr2 是一个指向 ptr1 的指针,通过两次解引用操作可以获取到 num 的值。

除了二级指针,还有 n 级指针,表示指向指针的指针的…的指针。以下是一个三级指针的示例:


1.3 拓展:n级指针

int ***ptr3 = &ptr2; // 三级指针,指向指针的指针的指针


f5d7e5125cfc4e418db8435eb324c11d.png

理解这种多层指针时,关键是逐层解读每个指针的作用。


二. 一维数组与指针:


2.1 利用指针遍历数组:

#include <stdio.h>
int main() {
    int arr[] = {1, 2, 3, 4, 5};
    int *ptr = arr; // 数组名本身就是一个指向数组首元素的指针
    for (int i = 0; i < 5; ++i) {
        printf("%d ", *(ptr + i));
    }
    return 0;
}


a09563024a3b448f840a98f2f8208a7f.png

这里,ptr 指向数组的第一个元素,通过指针的偏移遍历整个数组。


2.2 指针数组

#include <stdio.h>
int main() {
    int a = 1, b = 2, c = 3;
    int *arr[] = {&a, &b, &c}; // 指针数组
    for (int i = 0; i < 3; ++i) {
        printf("%d ", *(arr[i]));
    }
    return 0;
}


7423229e67ce4293b063abe693b4935f.png

在这个示例中,arr 是一个指针数组,存储了三个整数指针,通过数组下标访问各个指针。


2.3 数组指针

#include <stdio.h>
int main() {
    int arr[] = {1, 2, 3, 4, 5};
    int (*ptr)[5] = &arr; // 数组指针
    for (int i = 0; i < 5; ++i) {
        printf("%d ", (*ptr)[i]);
    }
    return 0;
}


25cfb7db899b4e6dac058cb2175efa7b.png

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


三、 二维数组指针


3.1 二维数组指针是什么?

二维数组指针是指向二维数组的指针。它通常用于处理多维数组的情况,允许对二维数组进行更灵活的操作。

二维数组指针的声明类似 int (*ptr)[N],其中 ptr 是指向包含N列的整数数组的指针。

示例代码

#include <stdio.h>
int main() {
    int arr[2][3] = {{1, 2, 3}, {4, 5, 6}};
    int (*ptr)[3] = arr; // 指向二维数组的指针
    for (int i = 0; i < 2; i++) {
        for (int j = 0; j < 3; j++) {
            printf("%d ", ptr[i][j]);
        }
        printf("\n");
    }
    return 0;
}


44427aa3509546a79d449454cb1a8a55.png

3.2 指针数组

指针数组是一个数组,其元素都是指针。通常用于存储多个指向不同数据类型的指针。

例如,int *ptrArr[3] 表示一个包含3个整数指针的数组。

示例代码

#include <stdio.h>
int main() {
    int a = 1, b = 2, c = 3;
    int *ptrArr[3] = {&a, &b, &c}; // 指针数组
    for (int i = 0; i < 3; i++) {
        printf("%d ", *(ptrArr[i]));
    }
    return 0;
}


3af97dae067943d8a405ca747b61e4d2.png

3.3 利用指针遍历二维数组:

指针也可以用于遍历二维数组,通过指针的偏移来访问数组的元素。

示例代码:

#include <stdio.h>
int main() {
    int arr[2][3] = {{1, 2, 3}, {4, 5, 6}};
    int *ptr = &arr[0][0]; // 指向二维数组的首元素
    for (int i = 0; i < 2; i++) {
        for (int j = 0; j < 3; j++) {
            printf("%d ", *ptr);
            ptr++; // 移动指针到下一个元素
        }
        printf("\n");
    }
    return 0;
}


这些示例代码展示了如何使用二维数组指针、指针数组以及指针来遍历二维数组。这些概念在处理多维数据结构时非常有用,使你能够更有效地操作和管理数据。

602ef932552a4a30a31682faef18292b.png


总结


C语言中的指针提供了强大的工具,通过了解和灵活运用指针,我们能够更有效地操作内存,实现复杂的数据结构和算法。二级指针为多级指针的概念提供了基础,而一维数组与指针的结合则在处理数组数据时提供了便捷的方式。在实际编程中,灵活运用这些概念可以让程序更加高效、清晰。

这些概念在处理多维数据结构时非常有用,使你能够更有效地操作和管理数据。

相关文章
|
12天前
使用指针访问数组元素
【10月更文挑战第30天】使用指针访问数组元素。
28 3
|
11天前
使用指针访问数组元素
【10月更文挑战第31天】使用指针访问数组元素。
24 2
|
20天前
|
算法 索引
单链表题+数组题(快慢指针和左右指针)
单链表题+数组题(快慢指针和左右指针)
24 1
|
29天前
|
存储
如何使用指针数组来实现动态二维数组
指针数组可以用来实现动态二维数组。首先,定义一个指向指针的指针变量,并使用 `malloc` 为它分配内存,然后为每个子数组分配内存。通过这种方式,可以灵活地创建和管理不同大小的二维数组。
|
29天前
|
存储
如何通过指针数组来实现二维数组?
介绍了二维数组和指针数组的概念及其区别,详细讲解了如何使用指针数组模拟二维数组,包括定义与分配内存、访问和赋值元素、以及正确释放内存的步骤,适用于需要动态处理二维数据的场景。
|
29天前
|
存储 算法 C语言
C语言:什么是指针数组,它有什么用
指针数组是C语言中一种特殊的数据结构,每个元素都是一个指针。它用于存储多个内存地址,方便对多个变量或数组进行操作,常用于字符串处理、动态内存分配等场景。
|
1月前
魔法指针 之 二级指针 指针数组
魔法指针 之 二级指针 指针数组
19 1
|
1月前
|
C语言
回溯入门题,数据所有排列方式(c语言)
回溯入门题,数据所有排列方式(c语言)
|
1月前
|
C语言
无头链表二级指针方式实现(C语言描述)
本文介绍了如何在C语言中使用二级指针实现无头链表,并提供了创建节点、插入、删除、查找、销毁链表等操作的函数实现,以及一个示例程序来演示这些操作。
22 0
|
2月前
|
存储 人工智能 C语言
C语言程序设计核心详解 第八章 指针超详细讲解_指针变量_二维数组指针_指向字符串指针
本文详细讲解了C语言中的指针,包括指针变量的定义与引用、指向数组及字符串的指针变量等。首先介绍了指针变量的基本概念和定义格式,随后通过多个示例展示了如何使用指针变量来操作普通变量、数组和字符串。文章还深入探讨了指向函数的指针变量以及指针数组的概念,并解释了空指针的意义和使用场景。通过丰富的代码示例和图形化展示,帮助读者更好地理解和掌握C语言中的指针知识。