news 2026/5/15 6:24:03

嵌入式Day--15指针数组和数组指针

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
嵌入式Day--15指针数组和数组指针

1.指针数组

本质是一个数组,数组中数据元素是指针。

数据类型 * 数组名[整形常量]; int * a[4]

char* a[4]={NULL}; char * b[5]={"hello","ok","how","are","you"}; // 指针指向了字符串常量,只可以读取不 可以修改

char str[8][100]={"hello","ok","how","are","you"}; char *str3[5]={str[0],str[1],str[3]};// 指针指向了数组,可以读取可以修改

存放字符串使用字符数组,操作字符串使用指针。
存放多个字符串使用二维字符数组(多个字符串的话),操作字符串数组使用指针数组

2.数组指针

对一维数组名执行取地址操作(&) , 地址值不变,类型升级为指向整个数组的指针
对数组指针执行解引用操作 (*) , 地址值不变, 类型降为指向第一个元素的指针

2.1应用

  • 需要和二维数组配合使用
  • 把二维数组作为参数的时候,在定义被调函数需要声明参数的数据类型时会用到。
#include <stdio.h> { int a[5] = {1, 2, 3, 4, 5}; // int []--> int * printf("a addr %p\n", a); printf("a[0] addr %p\n", &a[0]); printf("a[1] addr %p\n", &a[1]); printf("a[2] addr %p\n", &a[2]); printf("*a addr %d\n", *a); // int printf("a[0] addr %d\n", a[0]); // int printf("*(a+1) addr %d\n", *(a + 1)); // int printf("a[1] addr %d\n", a[1]); // int printf("a+1 addr %p\n", a + 1); // int * printf(" &a %p\n", &a); // 数组指针 printf("&a+1 %p\n", &a + 1); int(*p)[5] = &a; // int (*p)[5] 数组指针 int* p[5] // int * p1[5] =&a; int array2[4][4] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16}; int(*p2)[4] = array2; printf("array2 is addr%p\n", array2); // int [4][4] -> int (*)[4] +1 ->16byte printf("array2[0] is addr%p\n", array2[0]);// int * +1 4byte printf("array2[0][0] is addr%p\n", &array2[0][0]);// int * +1 4byte printf("array2[0][0] is addr%d\n", array2[0][0]); // int printf("a[1][2] %d\n",array2[1][2]); // printf("a[1][2] %d\n",*(array2[1]+2)); printf("a[1][2] %d\n",*(*(array2+1)+2)); printf("p2[1][2] %d\n",p2[1][2]); printf("p2[1][2] %d\n",*(p2[1]+2)); printf("p2[1][2] %d\n",*(*(p2+1)+2)); printf("&a[0] %p\n",&array2[0]); printf("&a[1] %p\n",&array2[1]); printf("p2 %p\n",p2); printf("p2+1 %p\n",p2+1); } { int array2[4][4] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16}; //array2 类型 -》 指针 -》 int [4][4] int(*)[4] 列是4 +1 sizeof(int) *4(列) //array2[0] -- > 指针 -》 int * 第一行的首元素的地址 == &array2[0][0] //array2[0][0] - > int -> 数据 int(*p2)[4] = array2; //p2 -> 类型 int(*)[4] +1 sizeof(int) *4(列) //p2[0] -> 类型 int* 第一行的首元素的地址 == &array2[0][0] //p2[0][0] -> int -> 数据 p2[1] = > *(p2+1) 下标运算符 和 解引用运算符的关系。 }

3.二级指针

指向指针的指针。 在定义指针变量的时候,会开辟8个自己的空间 。指针变量本身也是有内存地址的。对一级指针取地址操作,就会获得二级指针。二级指针需要解引用两次,可以访问到数据。

  • 如果在被调函数中,需要修改指针的指向(指针本身)就需要传递二级指针。
  • 如果在被调函数中,需要修改指针指向的内容(指针指向的变量数据)就需要传递一级指针。
void fun(char * arg_p) { static char str[10]="hello"; arg_p = str;// 无法修改主调的参数 } int main(int argc, char **argv) { char *p =NULL; fun(&p); printf("p is %s\n",p); // NULL; return 0; }

void fun2(char ** arg_p) // 二级指针 { static char str[10]="hello"; *arg_p = str; // 可以修改主调的参数 } int main(int argc, char **argv) { char *p =NULL; fun2(&p); printf("p is %s\n",p); return 0; }

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/15 6:19:09

5分钟搞定geckodriver安装:Firefox自动化测试完整指南

5分钟搞定geckodriver安装&#xff1a;Firefox自动化测试完整指南 【免费下载链接】geckodriver WebDriver Classic proxy for automating Firefox through Marionette 项目地址: https://gitcode.com/gh_mirrors/ge/geckodriver 想要实现Firefox浏览器的自动化测试和网…

作者头像 李华
网站建设 2026/5/15 6:16:05

《三维动画制作》学习心得

《三维动画制作》学习心得 —— 生产线动画创作感悟 为期一段时间的《三维动画制作》课程学习&#xff0c;我以自动化生产线为主题完成了三维动画作品。从最初的概念构思&#xff0c;到模型搭建、材质渲染&#xff0c;再到关键帧动画调试&#xff0c;整个过程不仅让我系统掌握了…

作者头像 李华
网站建设 2026/5/15 6:08:06

【清华SRA】Skill Retrieval Augmentation for Agentic AI

目录BackgroundMethodProblem FormulationBenchmark ConstructionExperimentsStudy DesignExperimental SetupSystematic Empirical StudyCurrent LimitationBackground 为什么需要skills&#xff1f; 传统大模型逐渐转向Agentic AI&#xff0c;从被动的文本生成器转变为能主动…

作者头像 李华
网站建设 2026/5/15 6:07:04

全域数学·体积与表面积通项定理【乖乖数学】

全域数学体积与表面积通项定理【乖乖数学】 定理编号&#xff1a;GM-GenForm-20260520 作者&#xff1a;乖乖数学 成文时间&#xff1a;2026 年 5 月 20 日 编入典籍&#xff1a;《数理原本 第 0 卷0 幺无穷本源卷》增补核心定理&#x1f4c4; 文档 1 总结&#xff1a;《全域数…

作者头像 李华
网站建设 2026/5/15 6:04:42

西电B测:基于SystemView的2PSK调制解调仿真与性能分析

1. SystemView与2PSK调制解调基础 SystemView作为通信系统仿真领域的"瑞士军刀"&#xff0c;我在学生时代第一次接触就感受到它的强大。这个由美国ELANIX公司开发的工具&#xff0c;用可视化的图符&#xff08;Token&#xff09;搭建系统模型的方式&#xff0c;让通信…

作者头像 李华