2015-07-31 5 views
-2

Почему мы использовали указатель в этом коде на C? В принципе, я просто ищу строку в массиве, но без указателя она не может работать. Но почему?Почему мы использовали указатель в этой программе?

int main() { 

    char *x[] = {"ab", "bc", "cd", 0}; 

    char *s = "ab"; 

    int i = 0; 

    while(x[i]) { 

      if(strcmp(x[i], s) == 0) { 
        printf("Gotcha!\n"); 
        break; 
      } 

      i++; 
    } 
} 
+0

Не могли бы вы привести пример того, что вы пытаетесь сделать, что не работает? Без указателя? – pushkin

+4

Как я узнаю, почему вы использовали указатели в некотором коде, который вы написали? Я не могу читать ваши мысли. Возможно, вы хотите перефразировать свой вопрос. –

+3

Практически все манипуляции с массивами в C выполняются с помощью указателей, явно или неявно. Рекомендуемое чтение: раздел 6 [comp.lang.c FAQ] (http://www.c-faq.com/). –

ответ

3

Если вы пытаетесь:

char x[] = ... 

Это массив символов, а это означает только один символ. Указатель позволяет использовать несколько символов для каждого элемента в массиве.

Указатель необходим в способе создания программы, поскольку тип данных char не может ссылаться на количество необходимых символов. Следующим лучшим типом данных для чистого C является char *, который может ссылаться на несколько символов.

+0

благодарю вас за ответ. – user3301104

+3

a char \ * does * not * hold несколько символов. – immibis

+0

Не стесняйтесь редактировать @immibis – fingaz

0

Строки являются удивительно сложным делом под капотом. C решил просто игнорировать всю сложность, возникающую со строками, не поддерживая их как тип. Существует тип char для одиночного символа , а строка - это только указатель на первый элемент массива символов. Конец строки помечен первым символом '\0' (0 байт).

Итак, рассказ: вы обрабатываете строки, вам нужны указатели (для символов, то есть ...).

+0

Благодарим вас за ответ. – user3301104

0

Вы ищете строку в массиве строк.
1.So, для строки s, мы используем указатель на первый символ строки. Вы можете представить массив, если хотите, просто вспомните о завершении нулевого значения.
2. Что касается строкового массива c, он реализуется здесь указателем на первую строку (массив символов). Приращение указателя проверяет все строки до последней строки, где она становится нулевой.

Если вы хотите, вы можете заменить его на 2d-массив, но вы должны заранее знать максимальный размер строки и изменять размер массива, если он становится слишком большим. Обычно указатели на символы являются самым простым наименее болезненный способ обработки строк в c.

Смежные вопросы