数组在作为参数传递时,传递的是整个数组还是首地址呢?

先来看一段代码:

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语言】关于数组传参问题/首地址相关推荐

  1. 【让你从0到1学会C语言】指针/数组传参以及static关键字

    作者:喜欢猫咪的的程序员 专栏:<C语言> 喜欢的话:世间因为少年的挺身而出,而更加瑰丽.                                  --<人民日报> ...

  2. C语言补漏:字符串指针与字符数组传参

    字符串指针与字符数组传参 深信服的笔试上被吊打,其中对一道用指针做形参的题目印象十分深刻,借此恶补了一晚上指针,今天总结,以作警示. ​ 试想有如下情形,将一个字符串指针做形参赋值函数修改其字符串,函 ...

  3. 在qt中用c语言数组,在QT函数中返回一个数组/把一个数组传参给函数

    1.把数组传参给函数 可以定义一个QVector的一个数组 QVector num(10); for(int  i =0;i<10;i++) num [i] = i*i; fun(num); / ...

  4. 【C语言进阶】⑤关于数组传参和指针传参辨析

    文章目录 一.数组 1.1.一维数组 1.2.二维数组 1.3.指针和数组 二.数组传参 2.1一维数组传参 2.2二维数组传参 2.3小结 三.指针传参 3.1一维指针传参 3.3二级指针传参 四. ...

  5. 易语言多线程时钟多线程数组传参

    传参-时钟多线程-数组传参 1.时钟组件 2.数组传参 3.多线程传参 教程源码: .版本 2 .支持库 EThread .支持库 spec.局部变量 n, 整数型n = 取数组成员数 (A_str) ...

  6. 【C语言】指针第二弹(指针数组、数组指针、数组传参)

    一. 指针数组 指针数组就是存放指针变量的数组,指针数组的本质是数组,而非指针. 1.1 定义和初始化 定义:int* arr[3]  //arr是存放整型指针的数组,包含3个元素 初始化:int* ...

  7. 一篇让你弄明白C语言指针传参和数组传参~

    文章目录 前言 ⭐️指针传参和数组传参 ⭐️一维数组传参 ⭐️一级指针传参 ⭐️一道经典的指针传参相关题目 ⭐️二维数组传参 ⭐️函数指针!!! ⭐️一个有趣的代码!(*(void( * )())0) ...

  8. [C] 数组指针、指针数组及数组传参

    指针 字符指针 数组指针 指针数组 一维数组传参 1. 整型数组 2. 指针数组 二维数组传参 一级指针传参 二级指针传参 小引 在指针的学习阶段,有不少同学都十分畏惧这个物什,甚至"谈指针 ...

  9. 【概念辨析】二维数组传参的几种可能性

    一.二维数组传参竟然不是用二级指针进行接收? 今天进行再一次的二级指针学习时,发现了一条以前没怎么注意过的知识点:二维数组进行传参只能用二维数组(不能省略列)进行接收或者是数组指针.         ...

最新文章

  1. AI在这张“问卷”上首次超越人类,SuperGLUE被微软谷歌两家“攻破”
  2. 腾讯2017年第三季度财报:微信广告收入大幅增长
  3. Yahoo!团队实践分享:网站性能优化的34条黄金守则
  4. Docker 安装Grafana可视化面板
  5. 关于移动端的一些tip
  6. 图论:dij算法优化:双端队列及详细证明
  7. 如何在IEDA中连github
  8. FZU_2019_Mountain Number题解
  9. HDU Today--hdu2112
  10. C/C++ map函数统计每个字母出现的次数
  11. WebLogic如何设置session超时时间
  12. WEB安全扫描器Netsparker推荐给大家
  13. 学UG编程,首先要学习什么?那些编程都是操机操出来的吗?
  14. java实现微信网页授权登录
  15. 新兴新能源设施[1]--盐穴压缩空气储能相关配套设施
  16. 《小孩-大冰》阅读笔记
  17. 重装也无法修复此计算机,win10系统重装|Win10“重置此电脑”时出现问题解决教程...
  18. 计算机类部分核心期刊投稿经验
  19. 如何参与到开源优测-积微速成计划任务
  20. 访问网站时,长时间打不开或无响应

热门文章

  1. york大学计算机专业排名,全球计算机专业最佳大学排名
  2. python交易是什么意思_Py交易是什么意思?Py交易是什么梗?
  3. 二进制逆向实验——寻找flag
  4. ASBR(自治系统边界路由器)
  5. matplotlib对excel数据可视化
  6. 数据报表开发技巧:自动为数据报表添加【小计】、【总计】行
  7. 均匀化退火时间_热处理加工均匀化退火要点
  8. 信息流广告文案与创意设计
  9. 学期末总结——我体会的翻转课堂
  10. 浅谈响应式开发与自适应布局!