前言

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

一、人物简介

  • 第一位闪亮登场,有请今后会一直教我们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. 二进制安装Kubernetes(k8s) v1.24.1 IPv4/IPv6双栈 --- Ubuntu版

    二进制安装Kubernetes(k8s) v1.24.1 IPv4/IPv6双栈 --- Ubuntu版本 Kubernetes 开源不易,帮忙点个star,谢谢了 介绍 kubernetes二进制安 ...

  2. window启动和停止服务命令

    NET STOP serviceNET STOP 用于终止 Windows 服务.终止一个服务可以取消这个服务正在使用的任何一个网络连接.同样的一些服务是依赖于另外一些服务的.终止一个服务就会终止其它 ...

  3. window远程桌面之通过修改端口链接

      windows开启及连接远程桌面 技术标签: 后端开发  windows         桌面 -> 此电脑 图标右键 -> 属性 远程设置 远程桌面 -> 修改为允许远程连接到 ...

  4. Linux 查看内存使用情况的几种方法

    *以下内容为本人的学习笔记,如需要转载,请声明原文链接微信公众号「ENG八戒」https://mp.weixin.qq.com/s/27UaVm5_FMhCnxB88pc0QA 在运行 Linux 系 ...

  5. ARL:资产侦察灯塔系统

    资产灯塔,不仅仅是域名收集 功能简介 "挖洞神器"资产安全灯塔(ARL),旨在快速侦察与目标关联的互联网资产,构建基础资产信息库. 协助甲方安全团队或者渗透测试人员有效侦察和检索资 ...

  6. vue2.x/vue3.0中使用ts

    vue2.x(vue-cli3)中使用ts      https://www.jianshu.com/p/3cbcdd766295 https://www.cnblogs.com/xiaohuizha ...

  7. es6的Symbol数据类型

    ES6引入了一种新的原始数据类型Symbol,表示独一无二的值.它是JavaScript语言的第七种数据类型,前六种是:Undefined.Null.布尔值(Boolean).字符串(String). ...

  8. react项目使用less样式,配置less

    create-react-app脚手架创建的项目有sass配置项,使用的时候只需要装包即可,下面是less使用的方法 由于 create-react-app 脚手架中并没有配置关于 less 文件的解 ...

  9. 从七个方面聊聊linux到底强在哪

    从事计算机相关行业的同学不难发现,身边总有一些朋友在学习linux,有的开发同学甚至自己的电脑就是它.经常听他们说linux如何好用等等.那么linux到底好在那里,能让大家如此喜欢.这也是我经常问自 ...

  10. Layui+dtree实现左边分类列表,右边数据列表

    效果如下 代码实现 <!DOCTYPE html> <html> <head> <meta charset="utf-8"> < ...