C/C++

Инкрементировать строки массива указателей. (Си)

Есть простой способ инкрементировать строки массива указателей?

Один способ неудобный знаю:
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
Но это неудобный способ. Просто показал что мне надо.
Не пойму чего ты тут делаешь

Вот это
*(massiv_ukazatelej)-=10
эквивалент
massiv_ukazatelej[0]-=10
и тупо меняет адрес в переменной ( элементе массива ), а куда он при этом "попадет" известно только компилятору ( никто не обещает, что переменные будут располагаться в порядке описания в исходном коде )

Например
char a[10];
int b;
char c[10];
не факт, что они будут в памяти как
[aaaaaaaaaabbbbcccccccccc] ( типа каждая буква это байт в памяти )
Валерий Онуфрийчук
Валерий Онуфрийчук
78 108
Лучший ответ
Валерий Михалков Я хочу не используя переменные инкрементировать строки массива указателей.
То есть так massiv_ukazatelej[i]; не хотелось бы.
Валерий Михалков Насоздаёшь иногда переменные, потом не знаешь для чего они)
А не проще ли внутри функции создать копию принятой строки, и в ней все разделители заменить на /0? И возвращать указатель на разные места этой одной строки.
Валерий Михалков Интересная идея. Но моя програма это метод изучения языка. Пробую по всякому.
а операция [ ] это не инкремент по номеру элемета массива??? Обязательно городить огород
Здравствуйте! По правильному, складывание строк, называется конкатенацией! С целью увеличения производительности (т. к. это СИ) можно положить указатель на нулевой, эээ, &arr1[0](так как они друг за другом следуют в оперативной памяти ) и не надо производить операции копирования и выделения памяти, только избавиться от '\0' в каждой строке! Вообще, реализаций стандарта СИ, море) Мож, где то проканает такая тактика, только вместо кавычек ставь фигурные скобки и каждый символ заводи в апостров чтоб не пришлось избавляться от терменирующего символа и запятые) А самое главное что есть еще фактор тебе во вред, называется он-выравнивание! Если бы были у тебя строки длиной в 2 ^x то можно было еще что то поделать. А так юзай memcpy и тому подобное
Faiz Sharifov
Faiz Sharifov
3 832
Валерий Михалков Здесь не про конкатенацию речь.