当前位置: 首页 > 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有区别么?

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

相关文章:

  • 宝塔安装配置FRP
  • 【第七篇】 SpringBoot项目的热部署
  • 基于SpringBoot解决RabbitMQ消息丢失问题
  • 嵌入:AI 的翻译器
  • 64、js 中require和import有何区别?
  • 解决MySQL8.4报错ERROR 1524 (HY000): Plugin ‘mysql_native_password‘ is not loaded
  • 深入理解 Agent 与 LLM 的区别:从智能体到语言模型
  • 为什么React列表项需要key?(React key)(稳定的唯一标识key有助于React虚拟DOM优化重绘大型列表)
  • 接口不是json的内容能用Jsonpath获取吗,如果不能,我们选用什么方法处理呢?
  • K8S认证|CKS题库+答案| 5.日志审计
  • 动端React表格组件:支持合并
  • ThinkPHP 5.1 中的 error 和 success 方法详解
  • Java高级 | 【实验七】Springboot 过滤器和拦截器
  • 【win | 自动更新关闭】win11
  • 从0开始学习R语言--Day19--连续变量的相关性检验
  • 基于功能基团的3D分子生成扩散模型 - D3FG 评测
  • C++2025.6.7 C++五级考题
  • 行为设计模式之Command (命令)
  • 鱼香ros docker配置镜像报错:https://registry-1.docker.io/v2/
  • 【单源最短路经】Dijkstra 算法(朴素版和堆优化版)、Bellman-Ford 算法、spfa 算法 及 负环判断
  • 设计网站特点/关键词推广软件
  • 龙岗网站改版/百度小说排行榜风云榜单
  • 网站建设 青少年宫/如何制作一个公司网站
  • 邹城房产信息网/seo诊断的网络问题
  • 哈尔滨建站哪个好/seo关键词排名点击工具
  • 自建网站支付问题/苹果要做搜索引擎