C++: массив как параметр функции
Как в C++ передать массив в функцию?
А нужно ли это делать? Как правило, массив в параметре функции интерпретируется как указатель.
В первой программе функция f1
вычисляет длину строки,
заданной фактическим параметром buf
, формальный параметр - указатель:
#include <stdio.h> #include <string.h> int f1 (char *s) { printf ("\nsizeof(s)=%d",sizeof(s)); for (int l=0;*s;s++,l++); return l; } void main () { char buf[128]; strcpy (buf,"Hello,win"); printf ("\nresult=%d",f1(buf)); }
Оператор printf
в теле функции показывает размер формального параметра, по выдаче программы видно, что это - указатель:
sizeof(s)=4 result=9
Разумеется, при вызове функции мы могли написать и f1(&buf[0])
, так как
&buf[0] = &(*(buf+0)) = &*buf = buf
.
Во второй программе формальный параметр функции - именно массив, пожалуй, единственный вариант его передать -
написать в заголовке char (&s)[128]
. Без указания размера в
квадратных скобках оператор sizeof
будет к объекту неприменим:
#include <stdio.h> #include <string.h> int f1 (char (&s)[128]) { printf ("\nsizeof(s)=%d",sizeof(s)); for (int l=0;s[l];l++); return l; } void main () { char buf[128]; strcpy (buf,"Hello,win"); printf ("\nresult=%d",f1(buf)); }
Вывод программы:
sizeof(s)=128 result=9
На практике делать способом 2 не нужно - ничего, кроме увеличения объёма кода и передачи лишних данных через стек, мы не добьёмся.
10.04.2013, 14:10 [12416 просмотров]