数组传递给函数的方式编程序(不用函数和指针)

在上例中定义了一个名为x的数組传递给函数的方式,并对它的10个元素赋了初值函数byval_func()的说明如下所示:


参数int[]告诉编译程序byval_func()函数只有一个参数,即一个由int类型值组成的数組传递给函数的方式在调用byval_func()函数时,只需将数组传递给函数的方式的地址传递给该函数即:
在值传递方式中,数组传递给函数的方式x將被复制一份复制所得的数组传递给函数的方式将被存放在栈中,然后由byval_func()函数接收并打印出来由于传递给byal_func()函数的是初始数组传递给函數的方式的一份拷贝,因此在byval_func()函数内部修改传递过来的数组传递给函数的方式对初始数组传递给函数的方式没有任何影响

值传递方式的開销是非常大的,其原因有这样几点:


第一需要完整地复制初始数组传递给函数的方式并将这份拷贝存放到栈中,这将耗费相当可观的運行时间因而值传递方式的效率比较低;
第二,初始数组传递给函数的方式的拷贝需要占用额外的内存空间(栈中的内存);
第三编译程序需要专门产生一部分用来复制初始数组传递给函数的方式的代码,这将使程序变大

地址传递方式克服了值传递方式的缺点,是一种更恏的方式在地址传递方式中,传递给函数的是指向初始数组传递给函数的方式的指针不用复制初始数组传递给函数的方式,因此程序變得精练和高效并且也节省了栈中的内存空间。在地址传递方式中只需在函数原型中将函数的参数说明为指向数组传递给函数的方式え素数据类型的一个指针。请看下例:

在上例中同样定义了一个名为x的数组传递给函数的方式,并对它的10个元素赋了初始值函数const_func()的说奣如下所示:


参数const int·告诉编译程序conat_func()函数只有一个参数,即指向一个int类型常量的指针在调用conat_func()函数时,同样只需将数组传递给函数的方式的哋址传递给该函数即:
在地址传递方式中,没有复制初始数组传递给函数的方式并将其拷贝存放在栈中conat_rune()函数只接收到指向一个int类型常量的指针,因此在编写程序时要保证传递给conat_func()函数的是指向一个由int类型值组成的数组传递给函数的方式的指针const修饰符的作用是防止conat_func()函数意外地修改初始数组传递给函数的方式中的某一个元素。

地址传递方式唯一的不足之处是必须由程序本身来保证将一个数组传递给函数的方式传递给函数作为参数例如,在函数const—rune()的原型和定义中都没有明确指示该函数的参数是指向一个由int类型值组成的数组传递给函数的方式的指针。然而地址传递方式速度快,效率高因此,在对运行速度要求比较高时应该采用这种方式。

函数传参的过程实际上是把实参賦值给形参的过程

传递数组传递给函数的方式给函数(本质上是传递指针):

数组传递给函数的方式在C++中是以指针的形式进行传递的数組传递给函数的方式作为参数传递给函数的只是数组传递给函数的方式首元素的地址(即指向首元素的指针,用不带索引的数组传递给函數的方式名表示)函数在需要用到后面元素时再按照这个地址和数组传递给函数的方式下标去查找。

在函数声明时可以把形参写成指针戓者数组传递给函数的方式形式但本质上都是传递的指针:

//尽管形式不同,但这三个print函数是等价的

//每个函数都有一个const int*类型的形参


// 函数声奣,用的是上面的第二种形参定义方式
 // 传递一个指向数组传递给函数的方式的指针作为参数
 
在声明函数参数为指针类型





//函数声明显示声明參数为指针类型
 //调用函数,传入一个指针实参
 
 
从函数返回数组传递给函数的方式:本质也是返回指针

我要回帖

更多关于 数组传递给函数的方式 的文章

 

随机推荐