形参数组与多维数组:调用时首地址传递
需积分: 10 19 浏览量
更新于2024-08-23
收藏 6.96MB PPT 举报
"形参数组大小(多维数组第一维)可不指定-c程序设计谭浩强第四版"
在C语言程序设计中,形参数组的处理方式有些特殊,尤其是在涉及多维数组时。标题提到的“形参数组大小(多维数组第一维)可不指定”是指在定义函数参数时,可以不明确地给出多维数组的第一维的大小。这是因为C语言编译器在处理函数的形参时,并不会检查数组的实际大小,这与定义普通变量时必须指定大小的情况有所不同。
形参数组的定义通常会写成`type array[]`或者`type array[][]`等形式,这里的方括弧中的数字可以省略,表示该维度的大小在调用时由实际传入的数组决定。这样做是因为在函数调用时,传递给函数的只是数组的首地址,而不是整个数组的拷贝。因此,形参数组的尺寸信息在函数内部是不可见的,它只能通过函数外部传入的实参来确定。
例如,我们定义一个接受二维数组作为参数的函数:
```c
void printArray(int arr[][3]) {
// 函数内部无法知道arr的第一维大小,但知道第二维是3
}
```
在这个例子中,虽然没有指定第一维的大小,但在函数内部,我们依然可以访问和操作数组的元素,因为数组名`arr`实际上是一个指向整型数组的指针,它存储的是数组的第一个元素的地址。数组的第二维大小3是已知的,因为它在定义时被指定。
调用这个函数时,你可以传入任意长度的第一维数组,只要第二维的大小是3:
```c
int main() {
int score[5][3]; // 定义了一个5行3列的数组
printArray(score); // 调用函数,传入score数组
return 0;
}
```
在这个例子中,`score[5][3]`和`printArray`中的`arr`实际上指向同一个内存区域,即数组`score`的首地址。由于形参数组的大小在函数内部未知,所以在函数内部不能动态改变数组的大小或进行越界操作,这可能导致未定义的行为。
函数间的数据传递是C语言编程的重要部分,特别是涉及到数组时。数组可以作为参数传递,但是传递的是数组的副本(实际上是一个指针)。因此,函数内对数组的修改会影响到实际传入的数组。递归调用是函数的一个高级特性,它是指函数在其定义中调用自身。对于递归函数来说,理解调用栈的工作原理以及如何正确地设置递归基是非常关键的。
外部函数和外部变量是C语言中用于在不同源文件之间共享数据和功能的机制。外部变量(extern关键字声明)可以在文件外部被其他文件访问,而外部函数则可以在任何地方被调用。理解和熟练使用这些概念是编写大型、模块化C程序的基础。
C语言程序设计涉及到许多核心概念,包括但不限于数组、函数、递归、数据传递和变量的作用域。理解这些概念对于编写高效、可靠的C代码至关重要。在谭浩强的《C程序设计第四版》中,这些主题都会得到深入的讨论和实践。
点击了解资源详情
380 浏览量
点击了解资源详情
380 浏览量
142 浏览量
2020 浏览量
330 浏览量
2013-01-03 上传
2009-09-08 上传
黄宇韬
- 粉丝: 21
- 资源: 2万+
最新资源
- 多播静态路由引起的循环问题
- WHR系列产品简易说明手册
- java学习文档及学习方法
- 宽带常用端口表宽带常用端口表
- SNMP的工作原理软件开发
- 2008年上半年信息系统项目管理师试题
- RAID介绍、制作及安装系统
- J2EE系统之-hibernate学习总结
- 项目管理知识体系指南2000
- 嵌入式Linux系统开发技术详解-基于ARM 第5章
- J2EE体系之-JSP学习
- FPGA设计软件quartus2使用教程
- J2EE体系统一,关于JDBC
- Linux网络编程 关于linux网络编程的入门书籍
- IIS系统漏洞大全(详细介绍若干年一来所存在的问题和解决方案)
- JavaEye新闻月刊 - 2009年2月 - 总第12期.pdf