数组指针作为形参(请问C++中,用数组作为函数形参和用指针作为函数形参,有什么不同)

本文目录
请问C++中,用数组作为函数形参和用指针作为函数形参,有什么不同
还是有差别的 虽然大多数时候都可以相互用
最大的差别就是指针可以改变,可以通过指针改变指向内容的值,但数组名不行
举个例子:(分别作为形参)
int num, *p;
p = num;//此时p指向数组的第一个元素
我在主函数里调用两个函数
1 Sum(num);
2 Sum(p+2,10);
这就有区别了,因为num数组首地址它不能变化,但是此时p指向了数组的第三个元素,而且后面的那个10也是可以改变的,所以说用指针作为形参的时候要带一个int n 表示你要处理的数的个数,所以说用指针作为形参的话会给你一种假象,它的确是指向的数组的某个元素(这要看你的指针移动了,比如说p+2等等,数组名不能移动),但是它仅仅只是一个指针,你可以在调用的函数里用sizeof(num),sizeof(p)求它们的值,就知道为什么总是要加上一个int n了,因为如果不加的话函数就不知道你要操作的数的个数,另外别忘了传递数组和传递一般的int,double等类型是不一样的,传递数组传递的是原数组,函数的操作就改变了原来的数组,而传递一般的数只是传递它的拷贝,对原来的数没有影响;
还有什么不懂的继续交流~~~
C语言数组作为形参实参的一些疑惑
void fun(int arr, int n);
在函数定义的时候,形参int arr不是表示某个元素的值,而是告诉编译器第一个参数是一个数组指针,可以接收实参传过来的数组地址。
实际上以上定义等价于下面的定义。
1.数组里面带元素个数:
void fun(int arr, int n);
这里的常数可以是任意正整数,实际上编译器是会忽略,因为这里只要告诉编译器我接收的是一个数组指针,至于它有多少个元素不关心,因为实参也只是传个地址过来。元素个数由参数二控制。至于为什么要这么约定可以看下面补充说明。
2.void fun(int *arr, int n);
使用指针,这种方式和题目中的方式是最常用的方式,第一种最不常用。
补充说明(为什么数组作为函数参数是传地址,而不是传每个元素):
设想一下,有一个函数如下
int fun(int nums, int size)
它的参数一要处理1000多个元素的数组,如果是传值即每个元素,那在函数体内是不是就得再申请1000多个整数的内存,还需要把值从实参那里复制过来,这是非常耗时间的而且没有必要,因为在内存的某个块已经存放了这些数据。只要告诉放在哪个位置,你函数体去那里找就行了。这里说的就是传地址了,只需要传个数组首地址,然后告诉有多少个元素要处理就OK了。传地址只需要复制地址给形参,相对传每个元素快得多。

更多文章:
从dnf关服开始当神豪(DNF”十个战法九个豪,还有一个是神豪“这句话还适用么)
2025年7月9日 05:45
method中文翻译(请问teaching approach和teaching method的区别)
2025年12月5日 13:45
compoundbutton(Android上层怎么读写proc节点)
2025年10月24日 03:45
kubernetes源码剖析pdf(client-go 源码分析)
2025年12月3日 03:00
设计模板设置为暗香扑面(计算机ppt怎么幻灯片模板为暗香扑鼻)
2026年7月29日 00:30
java设置excel自动调整行高(excel自动调整行高)
2026年3月20日 00:30
arraylist和array区别(ArraryList,Array string[]的差别是什么)
2026年1月4日 01:00
量化python培训(Python学习,量化交易的应该怎么学)
2026年8月30日 15:30
一个完整的html代码架构(急求HTML格式完整网页框架代码)
2025年6月13日 14:15
数据库管理系统与操作系统(在层次结构上,操作系统处于数据库管理系统的上层吗)
2026年9月23日 04:00











