Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 23.10.2009, 21:41   #11
netrino
Участник клуба
 
Аватар для netrino
 
Регистрация: 15.07.2008
Сообщений: 1,933
По умолчанию

Цитата:
Сообщение от breate Посмотреть сообщение
нет делается копия массива в стеке, причём массив статический а в *str действительно передаётся указатель на первый элемент
О_о Кто это Вам такое сказал? C++ это не Pascal ) Массивы передаются всегда по указателю, в стек забить его не возможно.

В параметре функции записи char array[] и char* array эквивалентны.

Цитата:
Сообщение от breate
void func(char &a[]);
Да и такая запись разве допустима?

Последний раз редактировалось netrino; 23.10.2009 в 21:44.
netrino вне форума Ответить с цитированием
Старый 24.10.2009, 10:20   #12
breate
Пользователь
 
Аватар для breate
 
Регистрация: 30.12.2008
Сообщений: 78
По умолчанию

да приношу свои извинения за ошибку

Цитата:
Сообщение от Бьерн Страуструп
При вызове функции выделяется память для ее формальных параметров, и каждый формальный
параметр инициализируется значением соответствующего фактического параметра. Семантика
передачи параметров тождественна семантике инициализации. В частности, сверяются типы
формального и соответствующего ему фактического параметра, и выполняются все стандартные и
пользовательские преобразования типа. Существуют специальные правила передачи массивов
($$4.6.5).
Цитата:
Сообщение от Бьерн Страуструп
Если в качестве параметра функции указан массив, то передается указатель на его первый элемент.
Например:
Код:
int strlen(const char*);
void f()
{
char v[] = "массив";
strlen(v);
strlen("Николай");
}
Это означает, что фактический параметр типа T[] преобразуется к типу T*, и затем передается. Поэтому
присваивание элементу формального параметра-массива изменяет этот элемент. Иными словами,
массивы отличаются от других типов тем, что они не передаются и не могут передаваться по значению.
Моя работа - Создание сайтов
breate вне форума Ответить с цитированием
Старый 24.10.2009, 11:34   #13
TwiX
Участник клуба
 
Аватар для TwiX
 
Регистрация: 28.07.2009
Сообщений: 1,510
По умолчанию

Да и без const нормально работает.
А как сделать что бы в функции можно было изменять строку то?
TwiX вне форума Ответить с цитированием
Старый 24.10.2009, 14:13   #14
netrino
Участник клуба
 
Аватар для netrino
 
Регистрация: 15.07.2008
Сообщений: 1,933
По умолчанию

Цитата:
Сообщение от TwiX Посмотреть сообщение
Да и без const нормально работает.
А как сделать что бы в функции можно было изменять строку то?
Так что именно надо? Константные строки(Те, что в кавычках) лучше не менять, это может стать причиной AV.
В принципе никто не мешает делать копию строки и возвращать указатель на эту копию:
Код:
char* change_string(const char* src)
{
    char* new_string = malloc(strlen(src)+1);
   
    strcpy(new_string, src);
    // Изменяем new_string как нам надо
    return new_string;
}
Только тогда нужно чтобы пользователь функции потом сам освобождал память, отведённую под строку.

Или так можно:
Код:
int main
{
    char string[] = "String";
    // Такая запись впихнёт "String" в массив символов string в стеке
   // Так что элементы string можно менять без опасений AV
}
netrino вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как автоматизировать функцию? MilanAC Помощь студентам 2 13.08.2009 15:11
Как вызвать функцию? blackstersl Общие вопросы Delphi 10 07.06.2009 19:22
Как при нажатии на строку в Listbox передавать нажатую строку в переменную Михаил Юрьевич Общие вопросы Delphi 5 16.03.2009 12:59
оформить как функцию arturka Помощь студентам 11 20.06.2008 23:41
Как создать обратную функцию, которая из уникального номера будет возвращать строку? SkAndrew Общие вопросы Delphi 8 06.04.2008 21:10