【C语言】关于数组传参问题/首地址
数组在作为参数传递时,传递的是整个数组还是首地址呢?
先来看一段代码:
void main() {int nums[] = { 1,2,3,4,5 };printf("&nums = %p\n", &nums);printf("&nums = %p\n", &nums+1);putchar('\n');printf("nums = %p\n", nums);printf("nums[0] = %p\n", &nums[0]);printf("nums[1] = %p\n", &nums[1]);
}
运行结果:
从运行结果可以看到,nums整个数组大小占5*4=20字节,打印的是B8,即从B8开始往后的20个字节都属与nums数组,可以自己再纸上画一下,是到CB结束。&nums+1后也就是整个数组+1后指向的就是CC,nums的地址和nums[0]的地址是相同的,也就是说nums存储的其实是数组第一个元素的地址。数组名其实是个指针变量,值就是第一个元素的地址。类型取决于数组元素的类型。
注:&nums取出的值其实是整个数组的地址,从运行结果可以看出来,虽然nums和&nums取出来的地址相同,但本质上是不相同的,可以看&nums+1和&nums[1]的地址对比。
现在了解了数组地址后,再回到上面的问题:数组在作为参数传递的时候是否传递的也是首地址呢?
再来看下面这段代码:
void test1(int nums[]) {printf("nums = %p\n",nums);printf("nums[0] = %p\n",&nums[0]);printf("nums[1] = %p\n",&nums[1]);
}
void test2(int * nums) {printf("nums = %p\n", nums);printf("nums[0] = %p\n", &nums[0]);printf("nums[1] = %p\n", &nums[1]);
}
void main() {int nums[] = {1,2,3,4,5};test1(nums);putchar('\n');test2(nums);
}
运行结果:
可以看到其实test1和test2执行结果相同,传递的都是首地址,也证明了数组名其实是一个指针变量。
注意:当使用sizeof运算符和单目运算符&时例外
1.sizeof表示取出整个数组的大小
2.&nums取出的地址是整个数组地址(不是首元素地址)
关于数组传参问题/首地址到这里就结束了,如果您有什么其他补充的或其他想法的可以留在评论区~
第一次学C语言如果有不好的地方请留在评论区或私信我也可以,以后有空的话也会经常发博客。谢谢支持!~
【C语言】关于数组传参问题/首地址相关推荐
- 【让你从0到1学会C语言】指针/数组传参以及static关键字
作者:喜欢猫咪的的程序员 专栏:<C语言> 喜欢的话:世间因为少年的挺身而出,而更加瑰丽. --<人民日报> ...
- C语言补漏:字符串指针与字符数组传参
字符串指针与字符数组传参 深信服的笔试上被吊打,其中对一道用指针做形参的题目印象十分深刻,借此恶补了一晚上指针,今天总结,以作警示. 试想有如下情形,将一个字符串指针做形参赋值函数修改其字符串,函 ...
- 在qt中用c语言数组,在QT函数中返回一个数组/把一个数组传参给函数
1.把数组传参给函数 可以定义一个QVector的一个数组 QVector num(10); for(int i =0;i<10;i++) num [i] = i*i; fun(num); / ...
- 【C语言进阶】⑤关于数组传参和指针传参辨析
文章目录 一.数组 1.1.一维数组 1.2.二维数组 1.3.指针和数组 二.数组传参 2.1一维数组传参 2.2二维数组传参 2.3小结 三.指针传参 3.1一维指针传参 3.3二级指针传参 四. ...
- 易语言多线程时钟多线程数组传参
传参-时钟多线程-数组传参 1.时钟组件 2.数组传参 3.多线程传参 教程源码: .版本 2 .支持库 EThread .支持库 spec.局部变量 n, 整数型n = 取数组成员数 (A_str) ...
- 【C语言】指针第二弹(指针数组、数组指针、数组传参)
一. 指针数组 指针数组就是存放指针变量的数组,指针数组的本质是数组,而非指针. 1.1 定义和初始化 定义:int* arr[3] //arr是存放整型指针的数组,包含3个元素 初始化:int* ...
- 一篇让你弄明白C语言指针传参和数组传参~
文章目录 前言 ⭐️指针传参和数组传参 ⭐️一维数组传参 ⭐️一级指针传参 ⭐️一道经典的指针传参相关题目 ⭐️二维数组传参 ⭐️函数指针!!! ⭐️一个有趣的代码!(*(void( * )())0) ...
- [C] 数组指针、指针数组及数组传参
指针 字符指针 数组指针 指针数组 一维数组传参 1. 整型数组 2. 指针数组 二维数组传参 一级指针传参 二级指针传参 小引 在指针的学习阶段,有不少同学都十分畏惧这个物什,甚至"谈指针 ...
- 【概念辨析】二维数组传参的几种可能性
一.二维数组传参竟然不是用二级指针进行接收? 今天进行再一次的二级指针学习时,发现了一条以前没怎么注意过的知识点:二维数组进行传参只能用二维数组(不能省略列)进行接收或者是数组指针. ...
最新文章
- AI在这张“问卷”上首次超越人类,SuperGLUE被微软谷歌两家“攻破”
- 腾讯2017年第三季度财报:微信广告收入大幅增长
- Yahoo!团队实践分享:网站性能优化的34条黄金守则
- Docker 安装Grafana可视化面板
- 关于移动端的一些tip
- 图论:dij算法优化:双端队列及详细证明
- 如何在IEDA中连github
- FZU_2019_Mountain Number题解
- HDU Today--hdu2112
- C/C++ map函数统计每个字母出现的次数
- WebLogic如何设置session超时时间
- WEB安全扫描器Netsparker推荐给大家
- 学UG编程,首先要学习什么?那些编程都是操机操出来的吗?
- java实现微信网页授权登录
- 新兴新能源设施[1]--盐穴压缩空气储能相关配套设施
- 《小孩-大冰》阅读笔记
- 重装也无法修复此计算机,win10系统重装|Win10“重置此电脑”时出现问题解决教程...
- 计算机类部分核心期刊投稿经验
- 如何参与到开源优测-积微速成计划任务
- 访问网站时,长时间打不开或无响应