前言

指针和数组之间存在着紧密的关系。在本文中,我们将探讨指针和数组的关系、指针算术和数组遍历、多维数组与指针以及指针数组和数组指针。

一、人物简介

  • 第一位闪亮登场,有请今后会一直教我们C语言的老师 —— 自在。

  • 第二位上场的是和我们一起学习的小白程序猿 —— 逍遥。

二、指针和数组的关系

  • 在C语言中,数组名是指向数组首元素的指针。

  • 示例代码:

#include <stdio.h>

int main() {
int arr[5] = {1, 2, 3, 4, 5};
int *ptr = arr; // 数组名作为指针使用 // 使用指针访问数组元素
printf("ptr指向 %d \n", *ptr);
return 0;
}
  • 在上述示例中,我们将数组名arr赋给指针ptr,并使用*ptr访问数组的第一个元素。

  • 输出结果

ptr指向 1

三、指针算术和数组遍历

  • 指针算术允许我们通过增加或减少指针的值来访问数组中的不同元素。
  • 通过改变ptr的值,实现对数组的遍历
  • 示例代码:
#include <stdio.h>

int main() {
int arr[5] = {1, 2, 3, 4, 5};
int *ptr = arr; // 使用指针算术访问数组元素
for (int i = 0; i < 5; i++) {
printf("ptr指向 %d \n", *(ptr + i));
} return 0;
}
  • 输出结果
ptr指向 1
ptr指向 2
ptr指向 3
ptr指向 4
ptr指向 5

四、多维数组与指针

  • C语言中支持多维数组,我们同样可以使用指针来访问多维数组的元素。

  • 示例代码:

#include <stdio.h>

int main() {
int arr[3][2] = {{1, 2}, {3, 4}, {5, 6}};
int (*ptr)[2] = arr; // 使用指针访问多维数组元素
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 2; j++) {
printf("%d ", *(*(ptr + i) + j));
}
printf("\n");
} return 0;
}
  • 我们定义了一个二维数组arr,并将其赋给指针ptr

  • 通过使用指针算术和双重指针解引用,访问了多维数组中的每个元素。

  • 输出结果

1 2
3 4
5 6

五、指针数组和数组指针

  • 指针数组是一个数组,其元素都是指针类型;
  • 数组指针是一个指针,指向一个数组。
  • 示例代码:
#include <stdio.h>

int main() {
int arr1[] = {1, 2, 3, 4, 5}; // 数组
int *arr2[5]; // 指针数组
int (*arr3)[5]; // 数组指针 int i; // 初始化指针数组
for (i = 0; i < 5; i++) {
arr2[i] = &arr1[i];
} // 打印指针数组中的元素
printf("指针数组中的元素:\n");
for (i = 0; i < 5; i++) {
printf("%d ", *arr2[i]);
} // 初始化数组指针
arr3 = &arr1; // 打印数组指针指向的数组中的元素
printf("\n数组指针指向的数组中的元素:\n");
for (i = 0; i < 5; i++) {
printf("%d ", (*arr3)[i]);
} return 0;
}
  • 我们定义了一个整型数组arr1,一个指针数组arr2和一个数组指针arr3

  • 指针数组arr2是一个包含5个元素的数组,每个元素都是一个指向整型变量的指针。

  • 我们使用arr2[i] = &arr1[i]将指针数组的每个元素指向arr1数组的对应元素。

  • 然后,我们通过*arr2[i]解引用指针数组中的每个元素,并打印出其值。

  • 数组指针arr3是一个指向包含5个整型元素的数组的指针。

  • 我们通过arr3 = &arr1将数组指针指向arr1数组。

  • 然后,通过(*arr3)[i]访问数组指针所指向的数组中的每个元素,并打印出其值。

  • 输出结果

指针数组中的元素:
1 2 3 4 5
数组指针指向的数组中的元素:
1 2 3 4 5

小结

通过这篇文章,我们学会了

1、利用指针访问和遍历数组

2、指针数组和数组指针的区别

欢迎各位 点赞 收藏 评论,如有错误请留言指正,非常感谢!

逍遥自在学C语言 | 指针和数组的关联的更多相关文章

  1. C语言指针和数组知识总结(上)

    C语言指针和数组知识总结(上) 一.指针的基础 1.C语言中,变量的值能够通过指针来改变,打印指针的语句符号可以是:  %08x 2.指针的本质 指针的本质就是变量,那么既然是变量,那么一定会分配地址 ...

  2. C语言指针与数组

    C语言指针与数组 数组的下标应该从0还是1开始? 我提议的妥协方案是0.5,可惜他们未予认真考虑便一口回绝    -- Stan Kelly-Bootle   1. 数组并非指针 为什么很多人会认为指 ...

  3. 逍遥自在学C语言 | 第一个C语言程序 九层之台起于垒土

    一.人物简介 第一位闪亮登场,有请今后会一直教我们C语言的老师 -- 自在. 第二位上场的是和我们一起学习的小白程序猿 -- 逍遥. 二.C语言简介 C语言是一种高级语言,运行效率仅次于汇编,支持跨平 ...

  4. C语言指针与数组的定义与声明易错分析

    部分摘自<C语言深度解剖> 1.定义为数组,声明为指针 在文件1中定义: char a[100]; 在文件2中声明: extern char *a; //这样是错误的 这里的extern告 ...

  5. 11-C语言指针&一维数组&字符串

    一.用指针遍历数组元素 1.最普通的遍历方式是用数组下标来遍历元素 1 // 定义一个int类型的数组 2 int a[4] = {1, 2, 3, 4}; 3 4 int i; 5 for (i = ...

  6. 【原创】一起学C++ 之指针、数组、指针算术 ---------C++ primer plus(第6版)

    C++ Primer Plus 第6版 指针和数组基本等价的原因在于指针算术! 一.指针 ⑴整数变量+1后,其值将增加1: ⑵指针变量+1后,增加的量等于它指向的类型的字节数: ⑶C++将数组名解析为 ...

  7. c语言指针,数组

    指针:说简单点就是一个地址.例如int *p,p是个变量,里面放的是地址0x0000,同理,每一个指针,不管什么类型,都是地址,也就是空间都是4个字节(32位机). 以此类推,指针也有指向它的指针in ...

  8. C语言指针和数组

    #include <stdio.h> int main() { /********************************************* * * 指针和数组: * 定义 ...

  9. c语言 指针与数组

    关键概念: 1.多个不同类型的指针可以对应同一个地址: 2.(&p)则是这样一种运算,返回一个指针,该指针的值是当时声明p 时开辟的地址,指针的类型是p的类型对应的指针类型: 3.(*p)操作 ...

  10. C语言指针和数组知识总结(下)

    一.数组指针: 数组指针就是一个指针,只不过它指向的是一个数组.可以通过如下方式来定义 typedef int Array[5]; //数组类型 Array* m;      //数组定义 还有一种更 ...

随机推荐

  1. 端口转发、Http Tunnel、内网穿透

    原文链接:https://www.yuque.com/tec-nine/architecture/mgxc71 SSH 命令帮助 命令行选项有: -a 禁止转发认证代理的连接. -A 允许转发认证代理 ...

  2. 有关SpringMVC的一些知识点

    Spring的获取对象 1.获取原生对象,直接在在方法李传http相关的对象.2.接受简单数据类型,接受简单数据类型(八种基本类型)参数直接在handler方法里声明,会自动把相同类型进行绑定,但是接 ...

  3. GPFS 文件系统部署步骤

    GPFS 文件系统部署步骤 参考文档: 简书网友提供: https://www.jianshu.com/p/a0ecc0838b3b?utm_campaign=maleskine&utm_co ...

  4. 随手记:Redis 部署到linux上面后,本地无法连接

    修改redis的配置文件 redis.conf 1. bind 设置为 0.0.0.0 2. protected-mode 设置为no   (也就是关闭保护模式) 3.    daemonize 设置 ...

  5. TF-IDF定义及实现

    TF-IDF定义及实现 定义 ​ TF-IDF的英文全称是:Term Frequency - Inverse Document Frequency,中文名称词频-逆文档频率,常用于文本挖掘,资讯检索等 ...

  6. AI人工智能 机器学习 深度学习 学习路径及推荐书籍

    要学习Pytorch,需要掌握以下基本知识: 编程语言:Pytorch使用Python作为主要编程语言,因此需要熟悉Python编程语言. 线性代数和微积分:Pytorch主要用于深度学习领域,深度学 ...

  7. [白嫖]阿里云服务器ECS以及无影云桌面

    [白嫖]aliyun 阿里云ECS和无影云桌面 [云服务器 ECS]学生认证约7个月 适合入门级开发者,用于搭建网站.小程序.云博客.部署主流开发环境,如 lamp.node.js.wordpress ...

  8. 基于ORB-SLAM3库搭建SLAM系统

    参考资料 ORB-SLAM3配置及安装教程 ORB-SLAM3配置安装及运行 环境配置 Win 11pro VMware 17Pro Ubuntu 18.04 Eigen3 Pangolin Open ...

  9. 2021-04-25:给定一个数组arr,和一个正数M,返回在arr的子数组在长度不超过M的情况下,求最大的累加和。

    福大大 答案2021-04-25: 前缀和+左大右小的双端队列.时间太晚了,所以写得简单. 代码用golang编写.代码如下: package main import ( "containe ...

  10. 2021-10-14:被围绕的区域。给你一个 m x n 的矩阵 board ,由若干字符 ‘X‘ 和 ‘O‘ ,找到所有被 ‘X‘ 围绕的区域,并将这些区域里所有的 ‘O‘ 用 ‘X‘ 填充。力扣1

    2021-10-14:被围绕的区域.给你一个 m x n 的矩阵 board ,由若干字符 'X' 和 'O' ,找到所有被 'X' 围绕的区域,并将这些区域里所有的 'O' 用 'X' 填充.力扣1 ...