C语言 数组指针详解及示例代码

C语言 数组指针详解及示例代码

什么是指针

指针是一种变量,它存储了一个地址。本质上,指针就是一个整数,但是它的类型与所指向对象的类型相同。在C语言中,我们可以通过指针来访问内存中的数据,或者在函数间传递指针来避免在函数之间进行大量的数据复制。

什么是数组指针

数组指针是指向数组的指针。与数组名类似,数组指针也可以被认为是第一个元素的地址。因此,当我们对数组指针进行递增和递减时,指针指向的地址也会随之改变,但是指针的类型会保持不变。

数组指针的声明和初始化

数组指针的声明和初始化可以与其他指针类型一样。如下所示:

int *arrPtr;
int arr[3];
arrPtr = arr; // 这里将指针指向数组的首地址

当我们将指针指向一个数组时,我们可以使用 *arrPtr 来访问数组的第一个元素,*(arrPtr + 1) 访问第二个元素,以此类推。

示例1:使用数组指针作为函数参数

下面这个例子演示了如何使用数组指针作为函数参数。在这个例子中,我们传递了一个数组和数组的长度,通过对指针的递增和解引用操作访问了数组中的元素,并输出了结果。

#include <stdio.h>
void printArray(int *arr, int len) {
    for(int i=0;i<len;i++){
        printf("%d ",*(arr+i));
    }
    printf("\n");
}
int main(){
    int arr[]={1,2,3,4,5};
    int len = sizeof(arr)/sizeof(arr[0]);
    printf("the length of array is %d\n",len);
    printArray(arr,len);
    return 0;
}

输出结果为:

the length of array is 5
1 2 3 4 5

示例2:指向二维数组的指针

下面这个例子演示了如何声明一个指向二维数组的指针。在这个例子中,我们声明了一个数组指针 arrPtr,并将其初始化为指向二维数组 arr 的首地址。我们也可以通过 arrPtr[i][j] 访问指向的二维数组中的元素。

#include <stdio.h>
int main(){
    int arr[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};
    int (*arrPtr)[4];
    arrPtr = arr;
    for(int i=0;i<3;i++){
        for(int j=0;j<4;j++){
            printf("%d ",arrPtr[i][j]);
        }
        printf("\n");
    }
    return 0;
}

输出结果为:

1 2 3 4
5 6 7 8
9 10 11 12

总结

本文介绍了C语言中数组指针的基本概念、声明和初始化方式,并通过两个示例代码演示如何使用数组指针作为函数参数以及访问指向二维数组的指针中的元素。掌握数组指针的相关知识,可以使代码更加简洁而高效。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C语言 数组指针详解及示例代码 - Python技术站

(0)
上一篇 2023年5月24日
下一篇 2023年5月24日

相关文章

  • C语言菜鸟基础教程之Hello World

    C语言菜鸟基础教程之Hello World 什么是C语言? C语言是一种通用的高级程序设计语言,它能够方便地对计算机进行底层操作,如硬件控制和内存访问等。同时由于其简洁、高效和强大的特性,C语言在操作系统、编译器、游戏开发等领域得到了广泛的应用。 Hello World实例 下面以经典的Hello World程序为例,让我们一步步地学习如何使用C语言进行编程…

    C 2023年5月23日
    00
  • windows下vscode使用cmake的方法

    下面是详细的讲解“Windows下VSCode使用CMake的方法”的完整攻略。 1. 安装环境 首先需要安装以下软件: Visual Studio Code CMake C/C++编译器 其中CMake和C/C++编译器可以使用MinGW-w64或者Visual Studio。 2. 创建CMake项目 在VSCode中打开一个空白的文件夹,然后使用以下命…

    C 2023年5月23日
    00
  • 魔鬼鱼DR7-PLUS做工值得买吗?未来人类魔鬼鱼DR7-PLUS配置性能全面评测+拆解

    魔鬼鱼DR7-PLUS做工值得买吗? 魔鬼鱼DR7-PLUS是一款高性能台式电脑主机,其做工和性能非常出色,下面我们来详细地评测一下它的配置和性能。 配置 魔鬼鱼DR7-PLUS的配置如下: 处理器:Intel Core i9-11900K(3.5GHz) 显卡:NVIDIA GeForce RTX 3090 24GB 内存:32GB DDR4 3200MH…

    C 2023年5月24日
    00
  • C++回溯算法之深度优先搜索详细介绍

    C++回溯算法之深度优先搜索详细介绍 什么是深度优先搜索 深度优先搜索(DFS)是一种用于遍历或搜索树或图的算法。在深度优先搜索中,我们按深度优先顺序访问每个节点,尽可能深地探索每个节点的分支,直到达到最深处,然后返回到该节点的上一级分支。 深度优先搜索的算法框架 深度优先搜索的算法框架可以表示成以下伪代码: dfs(node) { if (node is …

    C 2023年5月22日
    00
  • c#和Javascript操作同一json对象的实现代码

    下面我将详细讲解如何通过C#和JavaScript操作同一个JSON对象的实现代码攻略。 1.使用Newtonsoft.Json库 在C#中,我们可以通过使用 Newtonsoft.Json 库来轻松地序列化和反序列化 JSON 数据,包括将 JSON 数据转换为 .NET 中的对象,或者将 .NET 对象序列化为 JSON 格式。 在项目中添加 Newto…

    C 2023年5月23日
    00
  • 利用C语言实现猜数字小游戏

    下面是利用C语言实现猜数字小游戏的完整攻略: 步骤一:程序基本结构的搭建 我们可以先编写一个基本的程序框架,包含头文件、全局变量、函数声明等部分。具体代码如下: #include <stdio.h> #include <stdlib.h> #include <time.h> int secret_number; // 定义…

    C 2023年5月23日
    00
  • C++ move()函数案例详解

    C++ move()函数案例详解 什么是move()函数? move()函数是C++11中提供的一种对于对象进行右值引用(Rvalue Reference)的操作。该函数能够将对象转换成右值引用,实现对象的移动(Move)而非拷贝(Copy)。 为什么需要move()函数? 在C++的编程过程中,我们经常需要对于对象进行拷贝操作,以便进行如参数传递、返回值传…

    C 2023年5月22日
    00
  • 深入了解C++11中promise和future的使用

    深入了解C++11中promise和future 什么是promise和future 在C++11标准中,promise和future是一对用于线程间通信的重要工具。其中,promise负责提供使用者一个方式去异步生成一个值;future则提供了一种方式去访问这个值,或者等待这个值的生成。 可以将promise看作是一个值得承诺,而future则是对这个承诺…

    C 2023年5月22日
    00
合作推广
合作推广
分享本页
返回顶部