Как известно, во многих языках нет встроенного типа данных "строка", но есть символьные цепочки, которые можно хранить в символьном массиве.

Интересует вопрос передачи строки в процедуру.
Если передавать строку по значению, то, если язык поддерживает семантику копирования значений, это приведет к копированию всего массива. Это долго.
Если передавать строку по ссылке, то это быстро, но возникает вопрос: передавать по ссылке можно только L-value, но символьная цепочка является R-value, следовательно ее нельзя подставлять как параметр, передаваемый по ссылке.

Например, есть процедура

процедура Распечатать(перем Строка стр)
или
процедура Распечатать(перем символ[] стр)

то ее нельзя будет вызвать так:
вызвать Распечатать("Привет, мир!");

Но можно вызвать так:
переменная символ[] стр = "Привет, мир!";
вызвать Распечатать(стр);

Но это не удобно.
Как лучше решить этот вопрос?