C: 数组形参

简介: 知识这个东西,真是知道的越多就不知道的越多,C/C++这塘水得多深啊,哈哈。看下面3个片段: 1 void fun(char a[100]) { 2         fprintf(stderr, "%s\n", a); 3 } ...

知识这个东西,真是知道的越多就不知道的越多,C/C++这塘水得多深啊,哈哈。
看下面3个片段:
<一>

1 void fun(char a[100]) {
2         fprintf(stderr, "%s\n", a);
3 }
4  
5 int main(void) {
6         char aa[200] = "abcdef";
7         fun(aa);
8 }

<二>

1 void fun(char a[]) {
2         fprintf(stderr, "%s\n", a);
3 }
4  
5 int main(void) {
6         char aa[200] = "abcdef";
7         fun(aa);
8 }

<三>

1 void fun(char* a) {
2         fprintf(stderr, "%s\n", a);
3 }
4  
5 int main(void) {
6         char aa[200] = "abcdef";
7         fun(aa);
8 }

以上三个片段的输出其实是一样的:

abcdef
  • fun(char a[100]):实际上这里数组长度100会被编译器忽略,唯一可能起的作用是提示调用者这里应该传入一个长度为100的数组,但这种提示也是毫无约束性的。
  • fun(char a[]):这里a[]的作用是可以提示调用者这里处理的是一个数组而并不是char*,但是编译器还是会将a当作一个char*来处理,也就是说如果你在fun()函数中测试sizeof(a)的话,你得到的是一个指针的长度(在32位机器上一般是4)。
  • fun(char *a):这种形式应该是普通青年最常用的方式了吧……^_^,一般还会加一个数组长度参数len 。
目录
相关文章
|
移动开发 前端开发 JavaScript
分享24个强大的HTML属性,建议每位前端工程师都应该掌握!
HTML属性非常多,除了一些基础属性外,还有许多有用的特别强大的属性
|
存储 分布式计算 Cloud Native
Hologres揭秘:高性能原生加速MaxCompute核心原理
Hologres技术揭秘系列持续更新中,本期我们将带来Hologres高性能原生加速查询MaxCompute的技术原理解析。
7429 2
Hologres揭秘:高性能原生加速MaxCompute核心原理
RISC-V MCU开发实战(四) :步进电机
软件平台: MounRiver Studio(MRS),硬件平台: CH32V103开发板、ULN2003步进电机驱动板、28BYJ-48步进电机,使用GPIO进行步进电机控制。
RISC-V MCU开发实战(四) :步进电机
|
Linux Go Python
Go语学习笔记 - 文件操作(二) | 从零开始Go语言
Go语学习笔记 - 文件操作(二) | 从零开始Go语言
|
Java 缓存
java 并发——理解 wait / notify / notifyAll
java 并发——理解 wait / notify / notifyAll一、前言前情简介:java 并发——内置锁java 并发——线程 java 面试是否有被问到过,sleep 和 wait 方法的区别,关于这个问题其实不用多说,大多数人都能回答出最主要的两点区别: sleep 是线程的方法, wait / notify / notifyAll 是 Object 类的方法;sleep 不会释放当前线程持有的锁,到时间后程序会继续执行,wait 会释放线程持有的锁并挂起,直到通过 notify 或者 notifyAll 重新获得锁。
2245 0
|
1天前
|
弹性计算 关系型数据库 微服务
基于 Docker 与 Kubernetes(K3s)的微服务:阿里云生产环境扩容实践
在微服务架构中,如何实现“稳定扩容”与“成本可控”是企业面临的核心挑战。本文结合 Python FastAPI 微服务实战,详解如何基于阿里云基础设施,利用 Docker 封装服务、K3s 实现容器编排,构建生产级微服务架构。内容涵盖容器构建、集群部署、自动扩缩容、可观测性等关键环节,适配阿里云资源特性与服务生态,助力企业打造低成本、高可靠、易扩展的微服务解决方案。
1063 0
|
10天前
|
人工智能 运维 安全