Есть простой способ инкрементировать строки массива указателей?
Один способ неудобный знаю:
https://onlinegdb.com/ZdLvbA912o
int main()
{
char arr1[10]="000000000";
char arr2[10]="111111111";
char arr3[10]="222222222";
char arr4[10]="333333333";
char arr5[10]="444444444";
char *massiv_ukazatelej[20]={arr1,arr2,arr3,arr4,arr5};
printf("%s\n", *(massiv_ukazatelej)-=10);
printf("%s\n", *(massiv_ukazatelej)-=10);
printf("%s\n", *(massiv_ukazatelej)-=10);
printf("%s\n", *(massiv_ukazatelej)-=10);
}
На компьютере -=10 ,в онлайн компиляторе +=10
Но это неудобный способ. Просто показал что мне надо.
C/C++
Инкрементировать строки массива указателей. (Си)
Не пойму чего ты тут делаешь
Вот это
*(massiv_ukazatelej)-=10
эквивалент
massiv_ukazatelej[0]-=10
и тупо меняет адрес в переменной ( элементе массива ), а куда он при этом "попадет" известно только компилятору ( никто не обещает, что переменные будут располагаться в порядке описания в исходном коде )
Например
char a[10];
int b;
char c[10];
не факт, что они будут в памяти как
[aaaaaaaaaabbbbcccccccccc] ( типа каждая буква это байт в памяти )
Вот это
*(massiv_ukazatelej)-=10
эквивалент
massiv_ukazatelej[0]-=10
и тупо меняет адрес в переменной ( элементе массива ), а куда он при этом "попадет" известно только компилятору ( никто не обещает, что переменные будут располагаться в порядке описания в исходном коде )
Например
char a[10];
int b;
char c[10];
не факт, что они будут в памяти как
[aaaaaaaaaabbbbcccccccccc] ( типа каждая буква это байт в памяти )
А не проще ли внутри функции создать копию принятой строки, и в ней все разделители заменить на /0? И возвращать указатель на разные места этой одной строки.
Валерий Михалков
Интересная идея. Но моя програма это метод изучения языка. Пробую по всякому.
а операция [ ] это не инкремент по номеру элемета массива??? Обязательно городить огород
Здравствуйте! По правильному, складывание строк, называется конкатенацией! С целью увеличения производительности (т. к. это СИ) можно положить указатель на нулевой, эээ, &arr1[0](так как они друг за другом следуют в оперативной памяти ) и не надо производить операции копирования и выделения памяти, только избавиться от '\0' в каждой строке! Вообще, реализаций стандарта СИ, море) Мож, где то проканает такая тактика, только вместо кавычек ставь фигурные скобки и каждый символ заводи в апостров чтоб не пришлось избавляться от терменирующего символа и запятые) А самое главное что есть еще фактор тебе во вред, называется он-выравнивание! Если бы были у тебя строки длиной в 2 ^x то можно было еще что то поделать. А так юзай memcpy и тому подобное
Валерий Михалков
Здесь не про конкатенацию речь.
Похожие вопросы
- Динамический массив и указатель Си
- Почему динамический массив напрямую в функцию передать нельзя, а динамический массив указателей можно?
- С++. Упорядочить строки массива A в порядке убывания сумм цифр первого элемента каждой строки.
- Как в функции распечатать двумерный динамический массив в Си
- Как найти несколько минимальных значений массива в си?
- Указатель превращается в двумерный массив. (Си)
- Создат код с помощью массивов и указателей. с++
- Двумерный динамический массив с неизвестны количеством столбиков или строк
- Указатель, массив, bool
- Как в с++ можно ввести строку заданную через указатель
То есть так massiv_ukazatelej[i]; не хотелось бы.