【C 语言】数组名是什么?
距离上次更新本文已经过去了 734 天,文章部分内容可能已经过时,请注意甄别
数组名是什么?
@[TOC]
在我们敲代码的过程中,经常要遇到使用数组的地方
提到使用数组,就离不开数组名
c
1 | int arr[10] = { 0 };//arr就是数组名 |
同时我们也经常要用到使用 sizeof 计算数组元素个数的情况
c
1 | int sz = sizeof(arr) / sizeof(arr[0]); |
所以了解数组名的概念对于我们的 c 语言学习十分重要
数组名是数组首元素的地址
如题,这个概念在我们创建自定义函数的时候尤为重要
最经常犯的错误就是在自定义函数内部求主函数中 arr 数组的元素个数
c
1 | void sp1(int arr[]) |
这时从主函数传过来的 arr 只有首元素的地址,使用 sizeof 计算得到的 sz 只有 1
对后续要进行的操作如 for 循环中的 i<sz 来说是无效的
这是因为 int arr 传到自定义函数中的是形参
而形参 arr 是无法计算内部元素大小的
(具体的代码示例将在下篇博客的冒泡排序中展示)
代码示例 1 sz
我们可以用简单的代码来了解不同 arr 的书写方式得到的结果
c
1 |
|
可以看到结果是 40,这表明数组中 10 个元素所占用的字节是 40
在这个代码里面,arr 表示的是整个数组,sizeof 求的自然也是整个数组所占字节的长度
我们可以用下面这串代码得到数组内的元素个数,结果为 10
c
1 |
|
代码示例 2
下面这串代码中,我们使用三种不同的方式键入 arr
c
1 |
|
我们会发现三次打印的结果是一样的
- &arr 取出的是整个数组的地址
- arr 作为数组名–> 数组首元素的地址
- &arr [0] 取出的是数组首元素的地址
但实际上三者的本质是完全不同的
可以用 + 1 的方式来找出它们的不同之处
c
1 | int main() |
可以看到 & arr+1 之后的结果和 arr+1 的结果是不一样的
- &arr+1 与 & arr 之间相差 40
- arr+1 与 arr 之间相差 4
这是因为 & arr 代表的整个数组的地址,加 1 即跳过了整个数组
而 arr 只代表首元素地址,加 1 表示第二位的地址
总结
c 语言中有很多这样的小知识点,需要我们记录并加以了解
只有理解了为什么,我们才能在后续的学习、代码创作中写出更好的代码
点个赞再走呗,求求了!
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 慕雪的寒舍!
评论
表情图片预览
0 条评论
- 最新
- 最热
- 最早
- 作者
关闭评论
通知中心
「此时无声胜有声」
Artalk ErrorTypeError: Failed to fetch,无法获取评论列表数据
点击重新获取 | 打开控制台
点击重新获取 | 打开控制台