详解C语言中的指针数组和数组指针

news2026/4/2 12:35:33

指针数组和数组指针是 C 语言中比较常见的两种类型。它们虽然名字很相似,但是含义、用法以及指向类型都不同,需要分开理解。

指针数组

指针数组是一个数组,其中每个元素都是一个指针。这些指针可以指向不同类型的数据,也可以指向相同类型的数据。例如,下面是一个包含 3 个指针的指针数组,其中每个指针指向一个整数:

int a = 1, b = 2, c = 3;
int* ptr_array[3] = {&a, &b, &c};

上面这个指针数组 ptr_array 包含 3 个元素,每个元素都是一个指向整数的指针。这些指针分别指向变量 a、b 和 c 的地址。我们可以通过下标访问这些指针,进而访问到相应的整数:

printf("%d %d %d\n", *(ptr_array[0]), *(ptr_array[1]), *(ptr_array[2]));

上面这行代码输出 1、2 和 3,分别对应变量 a、b 和 c 的值。

需要注意的是,指针数组中的每个元素都是一个指针,因此当我们想要使用指针数组的元素时,需要通过解引用运算符 * 来获取它所指向的值,例如上面的 *(ptr_array[0])。

数组指针

数组指针是一个指针,它指向一个数组。它也可以指向不同类型的数组,例如整数数组、字符数组等。我们可以使用数组下标运算符 [] 来访问指针所指向的数组中的元素。例如,下面是一个指向 3 个整数的数组的指针:

int array[3] = {1, 2, 3};
int (*ptr_array)[3] = &array;

上述代码中,ptr_array 是一个指向 3 个整数的数组的指针。我们可以通过下标访问数组中的元素:

printf("%d %d %d\n", (*ptr_array)[0], (*ptr_array)[1], (*ptr_array)[2]);

上述代码会输出 1、2 和 3,分别对应数组中的元素。

需要注意的是,由于数组指针指向的是一个数组,因此当我们想要使用数组指针所指向的数组时,需要使用括号将指针和下标括起来,例如上面的 (*ptr_array)[0]。

下面是一个完整的示例代码,演示了指针数组和数组指针的使用:

#include <stdio.h>

int main() {
    // 指针数组
    int a = 1, b = 2, c = 3;
    int* ptr_array[3] = {&a, &b, &c};
    printf("%d %d %d\n", *(ptr_array[0]), *(ptr_array[1]), *(ptr_array[2]));

    // 数组指针
    int array[3] = {1, 2, 3};
    int (*ptr_array2)[3] = &array;
    printf("%d %d %d\n", (*ptr_array2)[0], (*ptr_array2)[1], (*ptr_array2)[2]);

    return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1246800.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

什么是 npm —— 写给初学者的编程教程

原文链接&#xff1a; 什么是 npm —— 写给初学者的编程教程 自 2009 年以来&#xff0c;Node.js 一直席卷全球。成千上万个系统基于 Node.js 构建&#xff0c;促使开发者在社区宣称“JavaScript 正在吞噬软件”。 Node 成功的主要因素之一是它广受欢迎的软件包管理器——np…

【Vue】Vue3 配置全局 scss 变量

variables.scss $color: #0c8ce9;vite.config.ts // 全局css变量css: {preprocessorOptions: {scss: {additionalData: import "/styles/variables.scss";,},},},.vue 文件使用

Docker 快速搭建 Gitlab 服务

linux环境&#xff1a; 使用 vim 编辑 hosts 文件&#xff1a; vim /etc/hosts按 I 进入编辑模式&#xff0c;在文件末行追加上虚拟机的 IP 和要设置的域名&#xff1a; 192.168.1.17 gitlab.kunwu.toplwindows环境&#xff1a; Windows 系统的 hosts 文件位于 C:\Windows\S…

please upgrade numpy version to >=1.20

升级 upgrade numpy_升级numpy-CSDN博客 pip install numpy --upgrade 没有pip conda install numpy --upgrade 会报错 conda list numpy来查看numpy版本 似乎这个numpy要看numpy-base这个 似乎没有pip

【AOSP】生成签名文件release key,通过Android源码对apk进行签名

简介 现在apk都需要签名&#xff0c;Flutter做的项目官方规定编译apk必须签名。 签名的好处&#xff1a; 应用来源验证&#xff1a; 应用签名允许Android系统验证应用的来源。每个应用都使用开发者的私钥进行签名&#xff0c;而应用的签名信息包含在应用的APK文件中。当用户尝…

组合不重复的3位数

编程要求 给出四个不同的数字&#xff0c;能够组成多少个不重复的3位数&#xff0c;按照从小到大的顺序输出&#xff0c;每行一个。 测试用例 测试输入 1 2 3 4 测试输出 123 124 132 134 142 143 213 214 231 234 241 243 312 314 321 324 341 342 412 413 421 423 431 …

生产实践:Redis与Mysql的数据强一致性方案

公众号「架构成长指南」&#xff0c;专注于生产实践、云原生、分布式系统、大数据技术分享。 数据库和Redis如何保存强一致性&#xff0c;这篇文章告诉你 目的 Redis和Msql来保持数据同步&#xff0c;并且强一致&#xff0c;以此来提高对应接口的响应速度&#xff0c;刚开始考…

2016年10月3日 Go生态洞察:Go 1.7中的子测试和子基准测试

&#x1f337;&#x1f341; 博主猫头虎&#xff08;&#x1f405;&#x1f43e;&#xff09;带您 Go to New World✨&#x1f341; &#x1f984; 博客首页——&#x1f405;&#x1f43e;猫头虎的博客&#x1f390; &#x1f433; 《面试题大全专栏》 &#x1f995; 文章图文…

复亚智能交通无人机:智慧交通解决方案大公开

城市的现代化发展离不开高效的交通管理规划。传统的交通管理系统庞大繁琐&#xff0c;交警在执行任务时存在安全隐患。在这一背景下&#xff0c;复亚智能交通无人机应运而生&#xff0c;成为智慧交通管理中的重要组成部分。交通无人机凭借其高灵活性、低成本、高安全性等特点&a…

6个常用的聚类评价指标

评估聚类结果的有效性&#xff0c;即聚类评估或验证&#xff0c;对于聚类应用程序的成功至关重要。它可以确保聚类算法在数据中识别出有意义的聚类&#xff0c;还可以用来确定哪种聚类算法最适合特定的数据集和任务&#xff0c;并调优这些算法的超参数(例如k-means中的聚类数量…

rhino 取消画线自带控制点方法~

很多朋友反映不知道 rhino 怎么取消画线自带控制点&#xff1f;下面就这个问题&#xff0c;一起来看看吧&#xff01; 软件地址&#xff1a;Rhino 8 for Mac中文下载 rhino 怎么取消画线自带控制点&#xff1f; 在Rhino中选择“线条”工具&#xff0c;或者使用快捷键“L”来…

上门预约小程序开发优势

想要放松身心&#xff0c;享受按摩的舒适感&#xff1f;那就需要一个专业的按摩师来上门服务。我们开发的预约按摩小程序app系统&#xff0c;汇聚各类上门按摩服务&#xff0c;包括推拿SPA、小儿推拿、中医等&#xff0c;为您提供高价值、高标准的养生健康体验。24小时随时提供…

『接口测试干货』| Newman+Postman接口自动化测试完整过程

『接口测试干货』| NewmanPostman接口自动化测试完整过程 1 Newman简介2 如何安装Newman&#xff1f;2.1 安装NodeJs2.2 安装Newman2.2 解决Newman不是内部命令 3 Newman使用3.1 Newman如何运行集合&#xff1f;3.2 如何查看帮助文档&#xff1f;3.3 环境变量设置3.4 关于全局变…

MyBatisPlus总结

MyBatis-Plus时Mybatis的Best Partner MyBatis-Plus (opens new window)&#xff08;简称 MP&#xff09;是一个 MyBatis (opens new window)的增强工具&#xff0c;在 MyBatis 的基础上只做增强不做改变&#xff0c;为简化开发、提高效率而生。 特性 无侵入损耗小强大的 CR…

第21章 JUC并发编程

通过本章的学习可以学到&#xff1a;掌握java.util.concurrent(JUC)开发框架的核心接口与使用特点,掌握TimeUnit类的作用&#xff0c;并且可以使用此类实现日期时间数据转换&#xff0c;掌握多线程原子操作类的实现以及与volatile关键字的应用&#xff0c;理解ThreadFactory类的…

PLC通过RS232转PROFINET与电子分析天平秤通讯案例

本案例是通过用兴达易控的XD-PNR200型RS232转Profinet网关连接电子分析天平秤与PLC通讯的配置案例&#xff0c;用到设备为西门子S7-1200PLC&#xff0c;RS232转Profinet网关&#xff0c;电子分析天平秤。 打开博图&#xff0c;添加PLC&#xff1b;本案例使用的是1200PLC。 添加…

leetcode 343.整数拆分 198.打家劫舍(动态规划)

OJ链接 &#xff1a;leetcode 343.整数拆分 代码&#xff1a; class Solution {public int integerBreak(int n) {int[] dp new int[n1];//每个n&#xff0c;拆分多个整数乘积的最大值dp [0] 0;dp [1] 1; for(int i 2 ; i<n; i){for(int j 0 ; j < i; j){dp[i] Ma…

云原生系列Go语言篇-编写测试Part 1

本文来自正在规划的​​Go语言&云原生自我提升系列​​&#xff0c;欢迎关注后续文章。 2000年以来&#xff0c;自动化测试的广泛应用可能比任何其他软件工程技术都更能提高代码质量。Go是一种专注于提高软件质量的语言和生态系统&#xff0c;很自然的在其标准库中包含了测…

欲更新浏览器的Mac用户请注意,AMOS又出一招新“骗术”

近日&#xff0c;Malwarebytes发现有一种专门针对Mac操作系统&#xff08;OS&#xff09;的数据窃取程序正通过伪造的网页浏览器更新程序进行分发。Malwarebytes称这与其通常的技术、战术和程序大不相同&#xff0c;该恶意软件可以模仿 Safari 和谷歌 Chrome 浏览器。 网络安全…

Linux上自动挂载windows下的网络共享文件夹

比如我们想在ubuntu上挂载一个windows的共享文件夹&#xff0c;我们可以用如下方式实现。 首先我们将windows下的文件夹右键选择【属性】&#xff0c;然后选择【共享】。 选择需要共享的用户&#xff0c;然后设置权限级别。 点击共享&#xff0c;然后点击完成。 这样我们在wi…