C语言基础语法-教案07(从小白到劝退之数组进阶)

C++ 学习路线:快速入门到进阶 C/C++ 是一门底层、细粒度、功能强大、学习曲线陡峭的语言,掌握这门语言的程序员通常有着更长的生命周期以及更深的护城河。但入门门槛高也是不争的事实,这篇文章把C++学习划分为入门、进阶、深入三个阶段,每步提供相应的学习方法和资源,帮助大家更好地掌握这门语言。 阅读详情

数组名涵义

  • 数组名在不同情形会表现为不同的含义:第一含义是整个数组,第二含义是首元素地址。
  • 触发第一含义的情形:
  1. 在数组定义中
  2. 在 sizeof 运算表达式中
  3. 在取址符&中
  • 触发第二含义的情形:
  1. 其他
  • 示例:
int a[3];                  // 此处,a 代表整个数组
printf("%d\n", sizeof(a)); // 此处,a 代表整个数组
printf("%p\n", &a);        // 此处,a 代表整个数组,此处为整个数组的地址

int *p = a;       // 此处,a 代表首元素 a[0] 的地址,等价于 &a[0]
p = a + 1;        // 此处,a 代表首元素 a[0] 的地址,等价于 &a[0]
function(a);      // 此处,a 代表首元素 a[0] 的地址,等价于 &a[0]
scanf("%d\n", a); // 此处,a 代表首元素 a[0] 的地址,等价于 &a[0]
  • C语言只有在第一含义的场合下表现为数组,其他大部分场合都表现为首元素的地址,当数组表现为首元素地址时,实际上就是一个指向其首元素的指针。数组运算实际上就是指针运算。

数组下标

  • 数组下标实际上是编译系统的一种简写,其等价形式是:
a[i] = 100;  等价于  *(a+i) = 100;
  • 根据加法交换律,以下的所有的语句均是等价的:
  a[i] = 100;
*(a+i) = 100;
*(i+a) = 100;
  i[a] = 100;
  • 数组运算,等价于指针运算(指针运算下一节教案会详细讲解)。

字符串常量

  • 字符串常量在内存中的存储,实质是一个匿名数组
  • 匿名数组,同样满足数组两种涵义的规定
  • 示例:
printf("%d\n", sizeof("abcd")); // 此处 "abcd" 代表整个数组
printf("%p\n", &"abcd");        // 此处 "abcd" 代表整个数组

printf("%c\n", "abcd"[1]); // 此处 "abcd" 代表匿名数组的首元素地址
char *p1 = "abcd";         // 此处 "abcd" 代表匿名数组的首元素地址
char *p2 = "abcd" + 1;     // 此处 "abcd" 代表匿名数组的首元素地址

零长数组(提前预习:结构体)

  • 概念:长度为0的数组,比如 int data[0];
  • 用途:放在结构体的末尾,作为可变长度数据的入口
  • 示例:
struct node
{
    /* 结构体的其他成员 */
    // 成员1
    // 成员2
    // ... ...
    
    int   len;
    char *data[0];
};

// 给结构体额外分配 10 个字节的内存。
struct node *p = malloc(sizeof(struct node) + 10);
p->len = 10;

// 额外分配的内存可以通过 data 来使用
p->data[0] ~ p->data[9]

变长数组

  • 概念:定义时,使用变量作为元素个数的数组。
  • 要点:变长数组仅仅指元素个数在定义时是变量,而绝非指数组的长度可长可短。实际上,不管是普通数组还是所谓的变长数组,数组一旦定义完毕,其长度则不可改变。
  • 示例:
int len = 5;
int a[len];  // 数组元素个数 len 是变量,因此数组 a 是变长数组

int x = 2;
int y = 3;
int b[x][y]; // 数组元素个数 x、y 是变量,因此数组 b 是变长数组
int b[2][y]; // 数组元素个数 y 是变量,因此数组 b 是变长数组
int b[x][3]; // 数组元素个数 x 是变量,因此数组 b 是变长数组
  • 语法:变长数组不可初始化,即以下代码是错误的:
int len = 5;
int a[len] = {1,2,3,4,5}; // 数组 a 不可初始化

c语言数组教案 立即下载

相关推荐

C语言数组学习教案.pptx

C语言数组学习教案.pptx

C语言基础语法-教案06(从小白到劝退-数组初阶)

C语言-教案06(从小白到劝退-数组初阶)

LINUX823的博客 248

图形化界面无限转圈?CentOS 7的SELinux避坑指南(附命令行修复实录)

本文详细解析了CentOS 7图形界面启动时无限转圈或卡在'starting switch root'的故障原因,主要与SELinux安全策略冲突有关。提供了三种修复方案:临时禁用SELinux、重装策略包和精细调整策略,并分享了长期维护建议,帮助用户平衡系统安全性与可用性。

potato的博客 798

C语言教程——数组(1)

本篇文章开启数组的学习。1、数组是使用下标来访问的,下标是从0开始的。2、数组的大小可以通过计算得到本篇文章讲解了一维数组和二维数组的初始化以及使用,还有一些储存的方式,个人感觉数组还是非常重要的,大家可以多多练习。

希望我的博客能帮助你 936

IDEA 导入 jbolt项目(实验室非公开项目)

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录准备一、准备数据库二、IDEA导入jbolt项目 准备 在实验室群文件中下载jbolt.zip和mysql.sql两个文件 将其解压到自己的目录下 一、准备数据库 打开Navicat新建一个jbolt数据库(字符集为utf8) 导入mysql.sql文件 数据库导入完毕 二、IDEA导入jbolt项目 点击打开一个项目 选择jbolt文件夹 以Maven形式打开 打开pom.xml 在里面添加jetty-server依赖

weixin_44094842的博客 975

3GPP Release与UE Category:无线通信标准演进与终端能力分级全解析

在蜂窝移动通信领域,技术标准的演进与终端设备的能力分级是理解整个产业发展的核心框架。其基本原理由国际标准组织3GPP通过周期性发布的技术规范版本(Release)来定义,每个Release都像一份阶段性的技术蓝图,规定了网络与终端应支持的新功能与性能基线。这种标准化机制的技术价值在于确保了全球设备的互联互通与网络的平滑升级,为从4G LTE到5G NR乃至未来的演进提供了清晰路径。在这一框架下,终端能力分级(如LTE时代的UE Category)是将标准转化为具体设备性能的关键环节,它直接定义了终端在射频和

weixin_34098209的博客 331

c语言程序设计一维数组教案,C语言一维数组教案.doc

C语言一维数组教案学 科:计算机科学与技术课 程:C语言程序设计课 题:一维数组课 时:2教学目标:1、掌握一维数组的定义和引用2、掌握一维数组的初始化方法3、了解与一维数组有关的应用编程方法教学重点:一维数组的定义和引用、初始化方法教学难点:与一维数组有关的应用编程方法教学方法:举例法,引导法教学步骤: 1、通过一个例子提出问题来引出本节课的知识点2、讲授一维数组的定义和...

weixin_32049849的博客 1359

xHCI驱动学习(1) 核心数据结构

虽然Linux内核拥有C语言构建的身体,但它骨子里散发的是面向对象的气质,这一个个的对象就是struct。面对一个内核模块的时候,首先要找出关键的struct和它们之间的关系,才能摸清代码的骨骼脉络。今天来理清USB xHCI相关的数据结构类型usb_hcd、xhci_hcd、hc_driver和全局变量xhci_pci_driver、xhci_hc_driver、xhci_pci_hc_driver之间的关系。

1万+

C语言基础语法-教案04(从小白到劝退之运算符)

C语言-教案04(运算符)

LINUX823的博客 1115

RK3566开发板实战:YT8512C百兆网卡调试全记录(附DTS配置避坑指南)

本文详细记录了RK3566开发板上YT8512C百兆以太网卡的调试全过程,包括硬件信号检测、DTS配置优化及常见错误排查。特别针对DTS配置中的关键参数和避坑指南进行了深入解析,为开发者提供实用的调试技巧和经验分享。

weixin_29189381的博客 273

vos如何对接okcc(保姆级教程)

1.添加账户 点击 系统->账户管理 [图片] 2.创建费率 系统->费率管理 点击添加

qq_46333281的博客 3453

C语言基础语法-教案16(从小白到劝退之结构体初阶)

C语言基础语法-教案16(从小白到劝退之结构体初阶)

LINUX823的博客 297

14、改进的目标检测与图像去模糊算法研究

本文研究了改进的目标检测与图像去模糊算法。改进的YOLOv5s算法在目标检测中通过添加PSA模块和VoVGSCSP结构,在轻量化模型的同时提高了检测的准确性和速度,适用于电力操作安全穿戴设备检测等场景。XT-GAN结合Transformer和生成对抗网络,在图像去模糊任务中有效解决了传统方法的不足,具有更低的计算复杂度和良好的鲁棒性。两种算法为计算机视觉领域的相关任务提供了更高效、准确的解决方案。

c7d8e的博客 214

吃透这7本正版C语言教程,从小白到编程大神,别再走弯路!

一、学C语言的人,90%都选错了教程!你是不是也抱着一腔热血想学C语言,却对着满屏晦涩的教程无从下手?是不是刷遍全网找资料,最后要么看不懂,要么学了用不上,白白浪费时间?

ney77的博客 260

CKA-CN考试之路----2

部分知道就可以了,考试不用输入,后面不再复述.这里我们需要将两端内容凭借成1个yaml。执行题目中给的的命令进行测试。

Q先生 242

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

C语言基础技能练习场:从环境配置到指针实战的进阶体验

C语言作为编程语言的基石,对理解内存布局、指针操作和算法实现至关重要。许多初学者在学完语法后,却因缺乏系统性练习而难以应对实际开发需求。基于分层训练的思路,从环境搭建到指针、字符串、文件读写等核心模块的实践,能够有效提升编程思维与调试能力。这种训练方式不仅适用于PTA、蓝桥杯等竞赛备考,也为嵌入式开发等工程场景奠定坚实基础。RYG练习场正是这样一套以实战为导向的C语言技能训练体系,通过红黄绿三层递进,帮助学习者稳步掌握C语言基础。

weixin_34259232的博客 378

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

【英雄哪里出来】一文带你吃透算法

算法入门必备,力扣官方教材

英雄哪里出来 1万+

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

当代码小白遇见C语言:从懵逼到入门的奇幻漂流 (新手必看!)

各位刚踏入编程江湖的少侠们(特别是被指针吓哭的萌新们),今天咱们要来场最接地气的C语言修炼之旅!先别急着打开Visual Studio,咱们得把"内功心法"先整明白(这可是老司机翻车换来的教训)!B站搜"VS Code C语言配置"(记得选播放量最高的那个,别问我怎么知道的)!(看到这里的都是真爱!送你个压箱底的网站:https://godbolt.org/ 这个在线编译器能看汇编代码,妈妈再也不用担心我学不懂底层原理啦!这就是浮点数的"薛定谔精度"(计算机表示小数时的二进制骚操作)!

datadigital的博客 631
上一篇: C语言基础语法-教案06(从小白到劝退-数组初阶)
下一篇: 程序员35岁会失业吗?
栈时没有名字
博客等级 码龄5年 289粉丝 47原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值