БлогNot. C++: массив как параметр функции

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 [12498 просмотров]


теги: программирование c++

К этой статье пока нет комментариев, Ваш будет первым