Как мне получить доступ к индексу указателя внутри массива в C? - PullRequest
2 голосов
/ 15 марта 2019

Если у меня есть следующий код:

char test[3] = {11,22,33};
char *ptr, *ptr2;
char *array[2] = {ptr,ptr2};

Как мне получить доступ к номеру 22 через массив?

Я пробовал следующее безуспешно:

array[0][1]

Но если я получу доступ к переменной указателя через функцию write (), например:

write(file, array[0], 3)

Запись файла 112233 будет без проблем.Я просто хочу получить доступ к индексу 1, хотя.

1 Ответ

3 голосов
/ 15 марта 2019

в

 char *ptr, *ptr2;
 char *array[2] = {ptr,ptr2};

вы пропустили инициализацию ptr и ptr2

примечание также ptr и ptr2 не являются постоянным элементом инициализатора

сделать

char test[3] = {11,22,33};
char *ptr = test, *ptr2 = NULL; /* ptr2 initialized even though not important for array[0][1] */
char *array[2];

array[0] = ptr;
array[1] = ptr2;

и array[0][1] будут 22 * ​​1022 *


Я рекомендую вам скомпилировать опции для выдачи предупреждения / ошибки и, конечно, принять их во внимание, чтобы компилятор не указал предупреждение / ошибку.

Если я скомпилирую ваш код с опциями, я получу:

pi@raspberrypi:~ $ cat a.c
int main()
{
  char test[3] = {11,22,33};
  char *ptr, *ptr2;
  char *array[2] = {ptr,ptr2};

  return array[0][1];
}
pi@raspberrypi:~ $ gcc -pedantic -Wextra a.c
a.c: In function ‘main’:
a.c:5:9: warning: ‘ptr’ is used uninitialized in this function [-Wuninitialized]
   char *array[2] = {ptr,ptr2};
         ^~~~~
a.c:5:9: warning: ‘ptr2’ is used uninitialized in this function [-Wuninitialized]

Но:

pi@raspberrypi:~ $ cat aa.c
#include <stdio.h>

int main()
{
  char test[3] = {11,22,33};
  char *ptr = test, *ptr2 = NULL; /* ptr2 initialized even not important for array[0][1] */
  char *array[2];

  array[0] = ptr;
  array[1] = ptr2;

  printf("%u\n", (unsigned char) array[0][1]);
}
pi@raspberrypi:~ $ gcc -pedantic -Wextra aa.c
pi@raspberrypi:~ $ ./a.out
22
pi@raspberrypi:~ $ 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...