当前位置: 首页 > news >正文

【看到哪里写到哪里】C的“数组指针”

C里面,数组指针,不是基本类型。顾名思义,数组指针,是指针,是指向数组的指针;

1.它的基本定义样子是

type (*ptr)[size];
  1. 这个指针,指向的数组的;
  2. 这里要注意,要定义数组指针,括号是必须的;如果没有括号,就是一个指针数组了;

2.数组指针的定义和初始化

int array[5] = {10, 20, 30, 40, 50};int (*arrayPtr)[5];
arrayPtr = &array;  
  1. arrayPtr是一个指针,它指向一个包含5个Int的数组;
  2. 要使用&获取数组的地址,赋值给到数组指针

3、一个二维数值的例子

// Define the structure for the data node
typedef struct DataNode
{int index;char name[256]; // Adjust size as necessarydouble value;   // Assuming the value is numericstruct DataNode *prev;struct DataNode *next;
} DataNode;void printNodeData(DataNode *node)
{printf("[%3d,%6.2f,%6s]", node->index, node->value, node->name);
}
void printArray(DataNode (*arr)[4])
{// DataNode(*pRow)[] = &arr[1];for (int i = 0; i < 2; i++){for (int j = 0; j < 4; j++){DataNode node = arr[i][j];printNodeData(&arr[i][j]);}printf("\n");}
}
void testArray()
{DataNode arr[2][4] = {{{1, "Node1", 10.5}, {2, "Node2", 20.5}, {3, "Node3", 30.5}, {4, "Node4", 40.5}},{{5, "Node5", 50.5}, {6, "Node6", 60.5}, {7, "Node7", 70.5}, {8, "Node8", 80.6}}};printArray(arr);          //Line 4DataNode(*arrPtr)[4];      //Line 5arrPtr = arr;              //LIne 6printArray(arrPtr);        //Line 7printNodeData(&arrPtr[0][2]);     //Line 8printNodeData(&(arrPtr + 1)[0][3]);  //LINE 10 arrPtr++;                            //Line 11    printNodeData(&(arrPtr)[0][3]);        //Line 12//Line 13// printArray(arrPtr);                // Line 14printNodeData(arrPtr [0]);            // Line 15printNodeData(&(arrPtr)[0][0]);        //Line 16
}
  1. Line 4和Line7的结果是一样的;
  2. 要注意在line8 中,传入参数,是一个*DataNode,
  3. Line10 和Line12的结果是一样的。这里要注意arrPtr+1,是这个数组指针的+1,是直接跳过到二维数组的下一行;
  4. 可以在Debug状态下查看arrPtr的地址变化!
  5. Line14,是不可以执行的,因为arrPtr增加一行之后,数组只有一行了,函数printArray()是要写成做两行的输出的。如果执行,会有不可知的结果输出。
  6. 可以考虑一下,LIne 15和Line16有区别么?

其实,还是要清楚指针的基本概念:它是指向一个内存地址的数值!它的增加和减少的位移,是由它的数据类型决定的。

http://www.xdnf.cn/news/924463.html

相关文章:

  • 洛谷P12170 [蓝桥杯 2025 省 Python B] 攻击次数
  • 罗尔斯·罗伊斯数字孪生技术赋能航空发动机运维革新:重构维护范式,驱动行业低碳转型
  • 如何拥有自己的镜像和仓库
  • Java 反射机制详解及示例
  • 【数据结构初阶】--算法复杂度的深度解析
  • python中从队列里取出全部元素的两种写法
  • 【C++字符串基础解析1】
  • Java Smart 系统题库试卷管理模块设计:从需求到开发的实战指南
  • 蓝桥杯单片机之通过实现同一个按键的短按与长按功能
  • ubuuntu24.04 编译安装 PostgreSQL15.6+postgis 3.4.2 + pgrouting 3.6.0 +lz4
  • 《拓扑排序》题集
  • 【JavaSE】泛型学习笔记
  • 【评测】用Flux的图片文本修改的PS效果
  • ECharts 提示框(tooltip)居中显示位置的设置技巧
  • CVE-2023-25194源码分析与漏洞复现(Kafka JNDI注入)
  • Python 接口:从协议到抽象基 类(定义并使用一个抽象基类)
  • 僵尸进程是什么?怎么回收?孤儿进程?
  • vue3: bingmap using typescript
  • 快速上手shell脚本运行流程控制
  • 深度相机的日常学习
  • 20250607-在Ubuntu中使用Anaconda创建新环境并使用本地的备份文件yaml进行配置
  • Swift 协议扩展精进之路:解决 CoreData 托管实体子类的类型不匹配问题(上)
  • 线程安全集合
  • JUC并发编程(五)volatile/可见性/原子性/有序性->JMM
  • 基于 GWAS 的群体遗传分析将 bZIP29 确定为玉米中的异种基因
  • QT学习教程(二十一)
  • redis主从复制
  • go中的接口返回设计思想
  • AI Agent 与 Agentic AI 企业实践
  • 湖北理元理律师事务所:债务优化中的民生保障实践