前言

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

一、人物简介

  • 第一位闪亮登场,有请今后会一直教我们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. pcm音频的录制、播放及转换

    操作系统 :Windows10_x64 pcm格式为原始音频数据,有时候会遇到需要录制.播放及转换的情况,这里记录下. 一.录制pcm音频 这里演示下使用Audacity进行pcm音频录音的过程. A ...

  2. golang pprof 监控系列(4) —— goroutine thread 统计原理

    golang pprof 监控系列(4) -- goroutine thread 统计原理 大家好,我是蓝胖子. 在之前 golang pprof监控 系列文章里我分别介绍了go trace以及go ...

  3. proprety详解

    property() 函数和@property修饰符. 第一种方法,使用property() 函数: class Person: def __init__(self): self.__name= No ...

  4. [Linux]查看硬件及操作系统信息

    许多的软件产品对硬件及操作系统等环境是有具体要求的,那么这时候如何快速知晓目标机器的目标资源信息是较为频繁的操作. 命令 全部硬件及系统信息 dmidecode (软硬件全部信息) hostnamec ...

  5. 请求被中止: 未能创建 SSL/TLS 安全通道 解决方案

    最近项目改造https,有部分请求出现"请求被中止: 未能创建 SSL/TLS 安全通道". 原因应该是,接口方变更了安全协议,而客户端并未启用该协议. 解决办法自然就是:让客户端 ...

  6. nlp数据预处理:词库、词典与语料库

    在nlp的数据预处理中,我们通常需要根据原始数据集做出如题目所示的三种结构.但是新手(我自己)常常会感到混乱,因此特意整理一下 1.词库 词库是最先需要处理出的数据形式,即将原数据集按空格分词或者使用 ...

  7. Java学习笔记02

    1. 运算符和表达式 运算符 ​ 就是对常量或者变量进行操作的符号. ​ 如:+ - * / 表达式 ​ 用运算符把常量或者变量连接起来的,符合Java语法的式子就是表达式. ​ 如:a + b ​ ...

  8. Object-Advanced笔记

    JavaScript对象进阶 数据劫持 1. 概念 一旦访问或者修改对象的属性时 拦截这个行为(访问/修改) 并对其添加除这个行为外的操作 最后返回结果 2. 实现 2.1 getter和setter ...

  9. Linux驱动开发环境-Kernel源码安装

    开如学习LDD3这本书. 我是在Fedora18上学习的,但我安装的这个版本,/usr/src/下面没有相应的源代码. 自己从KERNEL网站下载相应版本源码(安装驱动有问题) 于是从kernel的网 ...

  10. 基于pip的python包管理工具

    以下是软件下载链接:https://mysecreat.lanzoub.com/i5yvf0swgtne 软件功能:可以对python包进行安装.卸载.升级.换源等操作,不用输入复杂命令 源码: im ...