Укажите на индексированный указатель - PullRequest
0 голосов
/ 17 февраля 2012

Я сейчас работаю над написанием strstr с нуля. В моем коде я индексирую строку, и мне в конечном итоге необходимо сохранить определенную точку в строке, используя другой указатель. Вот фрагмент кода, с которым я борюсь:

char *save_str;
for(int i=0;i<length_str1; i++)
{
    if(str1[i]==str2[0])
    {
        *save_str=str[i];

Однако, это говорит мне, что я не могу этого сделать. Как мне указать указатель на определенный символ в индексе?

Ответы [ 2 ]

1 голос
/ 17 февраля 2012

Вы можете выбрать один из этих двух способов:

save_str = &str[i];

or

save_str = str+i;
0 голосов
/ 17 февраля 2012

Быстрый практический ответ

save_str = &str[i];

расширенный описательный скучный ответ

В "чистом с" и "с ++" есть функция для массивов и указателей.

Когда программист хочет адрес полного массива или первый элемент, оператор "&" не требуется, даже если некоторые компиляторы рассматривают его как ошибку или предупреждение.

char *myptr = NULL;
char myarray[512];

strcpy(myarray, "Hello World");

// this is the same:
myptr = myarray;

// this is the same:
myptr = &myarray[0];

Когда программист хочет адрес определенного элемента, тогда требуется оператор "&":

save_str = &str[i];

Я где-то читал, что эта функция была добавлена, в пурпуре.

Многие разработчики избегают этого и используют вместо этого арифметику указателей:

...

char *save_str;
...

// "&" not required
char *auxptr = str1;

for(int i=0; i < length_str1; i++)
{
    // compare contents of pointer, not pointer, itself
    if(*auxptr == str2[0])
    {
        *save_str = *auxptr;
    }

    // move pointer to next consecutive location
    auxptr++;
}

...

Лично мне бы хотелось, чтобы "&" использовалось всегда и во избежание путаницы. Приветствия.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...