以前一直不知道为什么数组作为形参调用函数时需要连同数组长度一起传进来,难道不能在被调用函数当中利用sizeof()自己算吗?答案是不可以!
下面来做个实验:

/*project:test
editor:帮我起个昵称吧
date:2019.8.13*/#include <stdio.h>
#define debug printf("----------到这里没问题-----------\n")int main(int argc, char* argv)
{int arr[] = { 1,3,2,6,5,7,8,9,10,0 };int length = sizeof(arr) / sizeof(arr[0]);printf("数组长度为:%d\n",length);for (int i=0; i < length; i++){printf("%d ", arr[i]);}printf("\n");
}

很简单的一个程序,输出结果也没问题。


那我们将arr数组作为参入传输被调用函数呢?

/*project:test
editor:帮我起个昵称吧
date:2019.8.13*/#include <stdio.h>
#define debug printf("----------到这里没问题-----------\n")void test(int* arr)
{int length = sizeof(arr) / sizeof(arr[0]);printf("被调用函数输出数组:\n");for (int i = 0; i < length; i++){printf("%d ", arr[i]);}printf("\n");}int main(int argc, char* argv)
{int arr[] = { 1,3,2,6,5,7,8,9,10,0 };int length = sizeof(arr) / sizeof(arr[0]);printf("数组长度为:%d\n",length);for (int i=0; i < length; i++){printf("%d ", arr[i]);}printf("\n");//将数组传入到被调用函数test(arr);}


结果被调用函数只输出了数组中的第一个数据。经过分析是因为被调用函数中
int length = sizeof(arr) / sizeof(arr[0]);
这条命令出了问题,sizeof(arr)结果是4,而 sizeof(arr[0])结果也是4。即使是将test函数的结构改为
void test(int arr[10]){},
明确告诉编译器传进来的是一个长度为10的数组也不行,结果还是一样。
因此我们可以知道数组作为参数传递的本质只是一个指针,也就是一个地址,编译器并不关心你一个地址后边有多少有用数据,编译器只看得到指针所指的数据。所以在被调用函数中,你想知道这个数组的长度是有点麻烦的。那么当被调用函数想要使用数组长度时,最方便就是从形参中获得,将test函数结构改为,
void test(int *arr,int length){}
就OK了。

/*project:test
editor:帮我起个昵称吧
date:2019.8.13*/#include <stdio.h>
#define debug printf("----------到这里没问题-----------\n")void test(int* arr,int length)
{printf("被调用函数输出数组:\n");for (int i = 0; i < length; i++){printf("%d ", arr[i]);}printf("\n");}int main(int argc, char* argv)
{int arr[] = { 1,3,2,6,5,7,8,9,10,0 };int length = sizeof(arr) / sizeof(arr[0]);printf("数组长度为:%d\n",length);for (int i=0; i < length; i++){printf("%d ", arr[i]);}printf("\n");//将数组传入到被调用函数test(arr,length);}

输出没问题了!

c语言:当数组作为形参调用函数时,需要连同数组长度一起传进来!相关推荐

  1. python 函数的调用的时候参数的传递_python定义函数时的参数调用函数时的传参...

    一.定义函数: 1.位置参数:直接定义参数 2.默认参数(或者关键字参数):参数名 = "默认值" 3.位置参数必须在默认参数之前 二.调用函数: 1.按位置传,直接写参数的值 2 ...

  2. C/C++中二维数组作函数形参时,调用函数时,可传递的实参类型的小结

    转自:http://blog.163.com/tianhit@yeah/blog/static/165747821201052195212719/ #include<iostream> u ...

  3. c语言函数调用找不到标识符,C语言在main中调用函数时找不到标识符

    把定义的函数放在,main函数之前即可. (推荐学习:phpstorm) 自定义的函数需要声明在调用之前,比如说在main函数里调用自定义的fun(),则fun()的方法体需要写在main函数之前. ...

  4. 补充函数编程,程序功能要求:有一个已知数组d,程序调用函数out输出数组 d的所有元素;调用函数plus对数组d中所有大于0的元素分别加上30;调用函数 cpy将d数组所有元素

    void  out(int *p,int n) {         int i=0;                                     //1分     for(i=0;i< ...

  5. js传参不是数字_js调用函数时传入的参数个数与函数定义时的参数个数不符时的操作...

    1.在js中函数没有重载的概念,如果声明了多个重名的函数,不管函数的形参个数是否一样,只有最有一个有效,其他的函数声明都是无效的.比如说声明了两个函数fn(),第一次声明时没有形参,第二次声明时形参有 ...

  6. python中调用函数时必须有实参_Python之函数(一)定义函数以及传参

    定义函数以及传参 函数的定义 def 函数名(): 函数体 例子: def func():#def关键字--定义 func函数名--和变量定义规则一样 ()必须要写格式 :声明 语句结束 s=[1,2 ...

  7. 用类来实现输入输出时间,定义多个类对象分别输入输出各对象的时间(时:分:秒),使用函数,数据成员不再由键盘输入,而在调用函数时由实参给出,并在函数中使用默认参数

    //个人留着复习用 #include using namespace std; class Time {public: int hour; //类 int minute; int sec; }; in ...

  8. C语言static关键字修饰变量及函数时的用法和原理

    目录 一.static关键字修饰局部变量 二.static关键字修饰全局变量 三.static关键字修饰函数 一.static关键字修饰局部变量 在内存中,往往将其分为三个区块,栈区,堆区,静态区.C ...

  9. ajax调用上一个ajax,关于jquery:当频繁使用ajax请求调用函数时,如何在处理下一个请求之前等待上一个ajax请求完成?...

    本问题已经有最佳答案,请猛点这里访问. 我在我的代码中有一个ajax请求,如下所示: function show_detail() { $('#product_'+index).html(' load ...

最新文章

  1. CVPR2020论文解读:3D Object Detection三维目标检测
  2. 深入理解分布式技术 - 缓存过期策略手写LRU
  3. PL/SQL Developer使用技巧总结
  4. idea搭建可运行Servlet的Web项目[maven]
  5. 一台电脑部署两个或多个 Hexo 博客(一台电脑使用两个或多个 GitHub 账号)
  6. oracle默认导出路径linux,传统路径导出 VS 直接路径导出(oracle exp direct=y)
  7. .NET中栈和堆的比较【转自:c#开发园地】
  8. C++文件操作(打开、关闭、文件读取数据存入数组)
  9. SAP License:更改物料基本计量单位
  10. 跑外卖仅靠吃苦可以吗?
  11. 什么是搜索引擎分词技巧
  12. nginx负载均衡 加权轮询和ip_hash
  13. 论文翻译:Two-phase Hair Image Synthesis by Self-Enhancing Generative Model
  14. Centos 中如何快速定制二进制的内核 RPM 包
  15. AMESim软件建模
  16. mysql和sql时间 字段比较大小的问题
  17. 怎么不能锁门_镜子能不能对着床
  18. MATLAB指纹识别算法实现
  19. chrome清除缓存快捷键
  20. UWP 中的各种文件路径(用户、缓存、漫游、安装……)

热门文章

  1. 在vue2使用百度脑图的kityminder-core进行二次开发思维导图,在源码中添加新的命令
  2. 相关苹果设备基本尺寸信息概览
  3. 2018冬季石家庄石一泵业错峰生产实施
  4. Stripes视图框架实现ActionBean视图访问
  5. [Err] 1064 - can't suport district table ALARMINFO schema:alarmDate for mutiple dataNode [dn3, dn4]
  6. Java基础知识之笔记总结分享
  7. 解析几何 曲线与二次曲面 二次曲面的分类(2.3)
  8. 抠图在线操作的方法有哪些?这些方法快收下
  9. 写给初级前端的面试经验
  10. python脚本微博自动转发抽奖_谈谈我做的自动转发微博抽奖程序