在上例中定义了一个名为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类型值组成的数组传递给函数的方式的指针。然而地址传递方式速度快,效率高因此,在对运行速度要求比较高时应该采用这种方式。