Легенда:
новое сообщение
закрытая нитка
новое сообщение
в закрытой нитке
старое сообщение
|
- Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
- Новичкам также крайне полезно ознакомиться с данным документом.
 |  |  |  |  |  |
[C++] посмотри дома :) 15.08.01 09:12 Число просмотров: 883
Автор: Ruslan Статус: Незарегистрированный пользователь
|
> > лучше дома посмотрю! Не фига уже синтаксис не помню... > > То что ты сегодня написал (char &p = (char *)V;), само > собой, не работает :) > Мне тоже интересно, как можно более кратко записать "char > (&L)[sizeof(V)] = V;" > И абсолютно не понятно возможно ли это для динамического > массива. завтра скажу, где-то между 16:00 до 00:00 :))))))
|
|
<programming>
|
[C++] ссылка на char[] 15.08.01 02:13
Автор: myrmidon Статус: Незарегистрированный пользователь
|
|
хочю сделать ссылку на char массив, что то не выходит
|
 |
[C++] ссылка на char[] 15.08.01 03:15
Автор: Ruslan Статус: Незарегистрированный пользователь
|
> хочю сделать ссылку на char массив, что то не выходит #define MAX_ENTR 100
char *arrChar[MAX_ENTR]; // у меня так работает
а массив какой двумерный?
char *arrChar[MAX_ENTR][MAX_ENTR];
|
 |  |
[C++] мне казалось, ссылка - это другое 15.08.01 08:02
Автор: Бяша <Biasha> Статус: Member
|
> > хочю сделать ссылку на char массив, что то не выходит Если в твоём понимании ссылка - это указатель, то предыдущий ответ тебя устроит:
> #define MAX_ENTR 100 > > char *arrChar[MAX_ENTR]; // у меня так работает > а массив какой двумерный? > char *arrChar[MAX_ENTR][MAX_ENTR];
Если же ссылка - это не совсем указатель, то:
char V[] = {'1', '2', '3', 0};
char (&L)[sizeof(V)] = V;
L[1] = 'L';
cout << V; ---
Скобки вокруг &L стоят потому, что у [] приоритет больше, чем у & (кстати я всегда закладку в MSDN храню на "operator associativity"), а как сделать без sizeof (и без преобразования типа V) я не знаю (на си меньше года пишу:).
|
 |  |  |
[C++] мне казалось, ссылка - это другое 15.08.01 08:09
Автор: Ruslan Статус: Незарегистрированный пользователь
|
> > > хочю сделать ссылку на char массив, что то не > выходит > Если в твоём понимании ссылка - это указатель, то > предыдущий ответ тебя устроит: > > > #define MAX_ENTR 100 > > > > char *arrChar[MAX_ENTR]; // у меня так работает > > а массив какой двумерный? > > char *arrChar[MAX_ENTR][MAX_ENTR]; > > Если же ссылка - это не совсем указатель, то: > char V[] = {'1', '2', '3', 0};> char (&L)[sizeof(V)] = V;
> L[1] = 'L';
> cout << V; ---
> Скобки вокруг &L стоят потому, что у [] приоритет больше, > чем у & (кстати я всегда закладку в MSDN храню на "operator > associativity"), а как сделать без sizeof (и без > преобразования типа V) я не знаю (на си меньше года пишу:).
Ну стормозил.... :), не выспался, да еще и на работе я.... :))))
Тогда я бы сделал:
char V[]={'1', '2', '3',0};
char &p = (char *)V;
по моему должно сработать... :)
|
 |  |  |  |
[C++] мне казалось, ссылка - это другое 15.08.01 08:15
Автор: Ruslan Статус: Незарегистрированный пользователь
|
|
лучше дома посмотрю! Не фига уже синтаксис не помню...
|
 |  |  |  |  |
Во как! 15.08.01 09:06
Автор: Access Статус: Незарегистрированный пользователь
|
Пусть есть char массив:
char a[8];
Первый элемент массива (не значене) и является ссылкой, поэтому при передаче ф-ии массива, ф-ия обрабатывает именно его, не делая копии.
А лучше исользуй указатели...
char *s=a; //мы передали указателю ссылку на массив и теперь можно работать с s как с массивом а (можно было и так char *s=a[0];)
А то что тебе показали:
char *[100];
просто создают массив указателей, и это будет работать т.к в указатель можно запихнуть по одному значению.
А если ты хочешь вводить размер массива с клавы, то использую динамическую память:
int n;
cin>>n;
char *a= new char[n]; //захватываем память для n элементов
............ // делаем то что надо
delete []a; //освобождаем память
А если двумерный массив то:
int n,nn;
cin>>n>>nn;
char *a= new *char[n];
for (int i=0;i<n;i++)
a[n]=new char [nn];
.............................
for (i=0i;i<n;i++)
delete a[nn];
delete []a;
|
 |  |  |  |  |
[C++] посмотри дома :) 15.08.01 08:38
Автор: Бяша <Biasha> Статус: Member
|
> лучше дома посмотрю! Не фига уже синтаксис не помню...
То что ты сегодня написал (char &p = (char *)V;), само собой, не работает :)
Мне тоже интересно, как можно более кратко записать "char (&L)[sizeof(V)] = V;"
И абсолютно не понятно возможно ли это для динамического массива.
|
 |  |  |  |  |  |
[C++] посмотри дома :) 15.08.01 10:53
Автор: Qrot Статус: Незарегистрированный пользователь
|
> > лучше дома посмотрю! Не фига уже синтаксис не помню... > > То что ты сегодня написал (char &p = (char *)V;), само > собой, не работает :) > Мне тоже интересно, как можно более кратко записать "char > (&L)[sizeof(V)] = V;" > И абсолютно не понятно возможно ли это для динамического > массива. гм.. похоже, что на С++ короче не запишешь
для С прокатывает:
char a[] = "12345";
char *&r = a;
printf(r"\n");
хотя для С++ можно так:
char a[] = "12345";
char * const &r = a;
cout << r << endl;
получется ссылка на постоянный указатель
|
 |  |  |  |  |  |
[C++] посмотри дома :) 15.08.01 09:12
Автор: Ruslan Статус: Незарегистрированный пользователь
|
> > лучше дома посмотрю! Не фига уже синтаксис не помню... > > То что ты сегодня написал (char &p = (char *)V;), само > собой, не работает :) > Мне тоже интересно, как можно более кратко записать "char > (&L)[sizeof(V)] = V;" > И абсолютно не понятно возможно ли это для динамического > массива. завтра скажу, где-то между 16:00 до 00:00 :))))))
|
 |  |  |  |  |  |  |
[C++] Вообщем так 15.08.01 11:19
Автор: myrmidon Статус: Незарегистрированный пользователь Отредактировано 15.08.01 11:21 Количество правок: 1
|
Короче есть функция, с параметром char sz1[0x100];
я хочю что бы этот парпметр был ссылкой, так как если в функции есть ссылочный параметр, то получается например так:
int i = 0;
void func(int& p)
{
p++;
}
при вызове func(i);
i == 1;
тоесть мне надо шобы функция изменяла один из своих параметров типа массива char , ну или указателя на char, вообщем на строковый параметр
|
 |  |  |  |  |  |  |  |
Так те надо изменить строку или указатель? 15.08.01 11:26
Автор: Glory <Mr. Glory> Статус: Elderman
|
|
|
 |  |  |  |  |  |  |  |  |
[C++] Так те надо изменить строку или указатель? 15.08.01 11:45
Автор: myrmidon Статус: Незарегистрированный пользователь
|
|
Какая разница? главное что бы работало
|
 |  |  |  |  |  |  |  |  |  |
[C++] Почувствуй разницу... ;-) 15.08.01 18:26
Автор: Glory <Mr. Glory> Статус: Elderman
|
> Какая разница? главное что бы работало а разница вот какая. Указатель - это просто число, которое определяетположениекаких-либо данных в памяти. То есть указатель на char[] определяет,гденаходится в памяти эта строка. А значение строки - это собственно данные, которые находятся по данному указателю. Пример (адреса взяты произвольно):
main()
{
char *t = new char[5]; // t = 0x100000 - выделяем память
strcpy(t, "test"); // t = 0x100000 - заполняем сроку новым содержимым
t = "fuck"; // t = 0x666 - изменение указателя на строку. Так делать нельзя.
delete[] t; // Возможна ошибка доступа к памяти
return 0;
}
|
 |  |  |  |  |  |  |  |  |  |
[C++] Так те надо изменить строку или указатель? 15.08.01 16:52
Автор: Qrot Статус: Незарегистрированный пользователь
|
> Какая разница? главное что бы работало ЧТО ЗНАЧИТ КАКАЯ РАЗНИЦА?!! ЧЕГО НАДО-ТО? указатель на строку - это одно, а содержимое строки это другое!
пример:
char *p = "1234";
p - это указатель на область памяти со данными "1234"
так тебе надо изменить значение p или "1234" поменять на "4321"?
если нужно поменять содержимое строки то можешь обойтись без ссылок
если нужно поменять значение указателя то пиши char (&V)[0x100] (вроде бы)
|
 |  |  |  |  |  |  |  |  |  |  |
[C++] Так те надо изменить строку или указатель? 15.08.01 23:09
Автор: myrmidon Статус: Незарегистрированный пользователь
|
|
Да я знаю какая разница между указателем и не указателем, фишка в том, что в итоге всё равно будет строка!
|
 |  |  |  |  |  |  |  |  |  |  |  |
[C++] ... едет не спеша. 16.08.01 07:35
Автор: Бяша <Biasha> Статус: Member Отредактировано 16.08.01 07:40 Количество правок: 1
|
> Да я знаю какая разница между указателем и не указателем, > фишка в том, что в итоге всё равно будет строка! Ты подумай, что ты сказал.
Тебя спрашивают, что тебе нужно изменить, а тебе пофиг - чего спрашивать тебе тогда, всё равно выйдет строка.
Короче если есть ещё вопросы, то прочитай текст ниже несколько раз и напиши на бумажке то, что по твоему мнению выведет программа. После чего посмотри, что же она действительно выводит. Если это не то, что ты написал, то перечитывай нитку, книжки пока не поймёшь.
#include <iostream.h>
void funk1(char *a){ a[1]++; a++;}
void funk2(char *&a){ a[1]++;}
void fuck(char *&a){ a++;}
int main()
{
char V[] = {'1', '2', '3', 0};
char *a = V;
cout << "a: " << a << endl;
funk1(a);
cout << "funk1: " << a << endl;
funk2(a);
cout << "funk2: " << a << endl;
fuck(a);
cout << "fuck: " << a << endl;
return 0;
} ---
|
 |  |  |  |  |  |  |  |  |  |  |  |  |
2Бяша ...Отличный пример! 16.08.01 10:24
Автор: Xan Статус: Незарегистрированный пользователь
|
|
|
|
|