Как я получаю доступ к отдельному символу от массива строк в c?

Решением, которое работало для меня, было получение tabIndex с getAttribute('tabIndex')

    for (let i = 0; i < rootNode.childNodes.length; i++) {
      const child = rootNode.childNodes[i];

      if (child.nodeType === 1 && child.getAttribute('tabIndex') === 0) {
             //find tabbable element
      }

    }

Дайте мне знать, если вам не нравится вопрос, я просто удалю его ..

7
задан sdellysse 3 March 2009 в 15:38
поделиться

5 ответов

Почти, но не совсем. Корректный ответ:

*((*(a+1))+2)

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

С другой стороны, это выражение:

a[1][2]

будет также работать!.... и возможно был бы предпочтен, потому что намерение того, что Вы пытаетесь сделать, более самоочевидно, и сама нотация более сжата. Эта форма не может быть сразу очевидна для людей, плохо знакомых с языком, но понять, что причина, нотация массива работает, состоит в том, потому что в C, операция индексации массива является действительно просто сокращением от эквивалентной операции указателя. т.е.: * (a+x) - то же как [x]. Так, путем расширения той логики до исходного вопроса существует две отдельных операции разыменования указателя, расположенные каскадом вместе, посредством чего выражение a [x] [y] эквивалентно общей форме * ((* (a+x)) +y).

18
ответ дан 6 December 2019 в 06:25
поделиться

Вы не должны использовать указатели.

международное основное (интервал argc, символ ** argv) {

printf ("Третий символ argv[1] [%c].\n", argv[1][2]);

}

Затем:

. $/основные привет третий символ argv[1] [l].

Это - то и l.

Вы могли использовать указатели, если Вы хотите...

* (argv[1] +2)

или даже

* ((* (a+1)) +2)

Поскольку кто-то указал выше.

Это вызвано тем, что имена массива являются указателями.

3
ответ дан 6 December 2019 в 06:25
поделиться

Iirc, строка является на самом деле массивом символов, таким образом, это должно работать:

a[1][2]
2
ответ дан 6 December 2019 в 06:25
поделиться

Кавычка от статьи Википедии об указателях C -

В C индексация массива официально определяется с точки зрения адресной арифметики с указателями; то есть, спецификация языка требует, чтобы выстроили [я] быть эквивалентным * (выстройте + i). Таким образом в C, массивы могут считаться указателями на последовательные области памяти (без разрывов), и синтаксис для доступа к массивам идентичен для этого, которое может использоваться для разыменования указателей. Например, массив может объявляться и использоваться следующим образом:

int array[5];      /* Declares 5 contiguous (per Plauger Standard C 1992) integers */
int *ptr = array;  /* Arrays can be used as pointers */
ptr[0] = 1;        /* Pointers can be indexed with array syntax */
*(array + 1) = 2;  /* Arrays can be dereferenced with pointer syntax */

Так, в ответ на Ваш вопрос - да, указатели на указатели могут использоваться в качестве массива без любого вида другого объявления вообще!

2
ответ дан 6 December 2019 в 06:25
поделиться

Попробовать a[1][2]. Или *(*(a+1)+2).

В основном ссылки на массив являются синтаксическим сахаром для разыменования указателя. [2] совпадает с a+2 и также тем же как 2 (если Вы действительно хотите нечитабельный код). Массив строк совпадает с двойным указателем. Таким образом, можно извлечь вторую строку с помощью или [1] или *(a+1). Можно затем найти третий символ в той строке (назовите это 'b' на данный момент), или с b[2] или с *(b + 2). Заменяя исходной второй строкой 'b', мы заканчиваем или с [1] [2] или с *(*(a+1)+2).

1
ответ дан 6 December 2019 в 06:25
поделиться
Другие вопросы по тегам:

Похожие вопросы: