Это действительно зависит от того, что вам нужно сделать. Если вам нужно создать отдельное хранилище для дублирования одной из строк brightnessvariants
, вы можете просто объявить отдельный массив и скопировать значения, как описано в комментариях и другом ответе.
Если вам просто нужно получить доступ к одной из строк brightnessvariants
в текущей области, тогда нет необходимости в отдельном хранилище и копировании. Все, что требуется, - объявить указатель и назначить начальный адрес нужной строки. Затем вы можете получить доступ к нужной строке brightnessvariants
, как если бы это был отдельный массив. например
uint8_t brightnessvariants[4][101] = {{0}}, *btable = NULL;
Выше btable
(короткий для brightnesstable
) просто uint8_t
указатель. Ему может быть присвоен адрес любой из строк в brightnessvariants
. например для второго ряда
btable = brightnessvariants[1];
btable
может затем использоваться, чтобы получить доступ любое значение в пределах второго ряда, так же, как если бы это был отдельный массив. Вот небольшой пример, который может помочь:
#include <stdio.h>
#include <stdint.h>
int main (void) {
uint8_t brightnessvariants[4][101] = {{0}}, *btable = NULL;
int nrows = sizeof brightnessvariants/sizeof *brightnessvariants;
for (int i = 0; i < 101; i++) {
brightnessvariants[0][i] = i + 1;
brightnessvariants[1][i] = i + 3;
brightnessvariants[2][i] = i + 5;
brightnessvariants[3][i] = i + 7;
}
for (int i = 0; i < nrows; i++) {
printf ("\nbrightnesstable[%d] :\n\n", i);
btable = brightnessvariants[i];
for (int j = 0; j < 101; j++) {
if (j && j % 10 == 0) putchar ('\n');
printf (" %3hhu", btable[j]);
}
putchar ('\n');
}
return 0;
}
Пример использования/вывода
$ ./bin/ptrtobtable
brightnesstable[0] :
1 2 3 4 5 6 7 8 9 10
11 12 13 14 15 16 17 18 19 20
21 22 23 24 25 26 27 28 29 30
31 32 33 34 35 36 37 38 39 40
41 42 43 44 45 46 47 48 49 50
51 52 53 54 55 56 57 58 59 60
61 62 63 64 65 66 67 68 69 70
71 72 73 74 75 76 77 78 79 80
81 82 83 84 85 86 87 88 89 90
91 92 93 94 95 96 97 98 99 100
101
brightnesstable[1] :
3 4 5 6 7 8 9 10 11 12
13 14 15 16 17 18 19 20 21 22
23 24 25 26 27 28 29 30 31 32
33 34 35 36 37 38 39 40 41 42
43 44 45 46 47 48 49 50 51 52
53 54 55 56 57 58 59 60 61 62
63 64 65 66 67 68 69 70 71 72
73 74 75 76 77 78 79 80 81 82
83 84 85 86 87 88 89 90 91 92
93 94 95 96 97 98 99 100 101 102
103
brightnesstable[2] :
5 6 7 8 9 10 11 12 13 14
15 16 17 18 19 20 21 22 23 24
25 26 27 28 29 30 31 32 33 34
35 36 37 38 39 40 41 42 43 44
45 46 47 48 49 50 51 52 53 54
55 56 57 58 59 60 61 62 63 64
65 66 67 68 69 70 71 72 73 74
75 76 77 78 79 80 81 82 83 84
85 86 87 88 89 90 91 92 93 94
95 96 97 98 99 100 101 102 103 104
105
brightnesstable[3] :
7 8 9 10 11 12 13 14 15 16
17 18 19 20 21 22 23 24 25 26
27 28 29 30 31 32 33 34 35 36
37 38 39 40 41 42 43 44 45 46
47 48 49 50 51 52 53 54 55 56
57 58 59 60 61 62 63 64 65 66
67 68 69 70 71 72 73 74 75 76
77 78 79 80 81 82 83 84 85 86
87 88 89 90 91 92 93 94 95 96
97 98 99 100 101 102 103 104 105 106
107
Посмотрите вещи снова и дайте мне знать, если у вас есть какие-либо вопросы. Если вам нужен пример копирования вместо использования указателя, дайте мне знать, и я буду рад помочь.
Зачем вам это нужно? – EOF
просто используйте петлю для доступа к содержимому подмассива и скопируйте каждое значение в новый массив. –
@johnelemans: Что случилось с 'memcpy'? – Olaf