Ваш вопрос Как мы можем получить доступ к descrptn из образца структуры, используя для хранения структуры? адресуется в основной функции скорректированного кода ниже, но из-за некоторых неправильных предположений о форме вашей составной структуры это может выглядеть не так, как вы предполагали.
Во-первых, есть некоторые ошибки синтаксиса и неправильные предположения, которые необходимо решить.
1) - Примечание: Поскольку вы инициализация элемента константного выражения в 0xFF, даже если его ориентация в инициализаторе должна идентифицировать его как signed char
, в зависимости от компилятора и его настроек, то можно предположить, unsigned char
и предупреждать о переполнении. (Это именно то, что происходит в моей системе). Поскольку значение фактически выровнено с signed char
, во время выполнения переполнение не должно происходить.
2) - У вас есть массив struct
. Хотя простой массив можно инициализировать с помощью переменной (Variable Length Array концепция была действительна с C99.), A struct может быть инициализирован только с постоянными значениями. Поскольку ваш код пытается инициализировать структуру (sample
) с переменной, она не должна компилироваться.
3) - Форма инициализатора структуры должна соответствовать форме инициализации структуры, включая положение и тип инициализатора. Поскольку TypePara является составной структурой (структурой, содержащей член структуры), ее инициализатор должен учитывать это. Ваш инициализатор для const TypePara storage[] ={...}
не сформирован правильно.
Первые два элемента должны быть четко обозначены для вас с сообщениями времени компиляции. Убедитесь, что ваш компилятор установлен для их просмотра.
Третий товар, к сожалению, не всегда будет отображаться как ошибка или предупреждение. C иногда позволяет делать то, что не обязательно правильно.
Каждый из них описан ниже, в синтаксисе и комментариях.
Используя свои struct
определения, со следующими указанными изменениями, вы можете получить доступ к descrptn
как это: (Ниже приводится полный и компилируется адаптация оригинального поста)
typedef struct { //Note:
char hex; //Initializer for TypeText shaped like this:
char descrptn[50]; //hex description
}TypeText; //{0x01, "one"};
typedef struct { //Note: TypePara is a struct containing an array of struct
int val; //Initializer for each instance of TypePara shaped like this:
TypeText test[10]; //val TypeText[0] TypeText[1] TypeText[9]
}TypePara; //{1, {0x01, "one"},{0x02, "two"}...{0x0A, "Ten"}};
static const TypeText sample[]={
{0x00, "Low"},
{0x49, "Mid"},
//{0xFF, "HIgh"} //commented and replaced to
{0x7F, "High"} //prevent possible overflow condition
};
//const TypePara storage[]= {
// {0, sample}, //error, "sample is not a compile time constant
// {1, sample}
//};
//Note: illustrates shape only. Values are otherwise meaningless
const TypePara storage[] = {
{ 0,{{0x00, "zero"},{0x01, "one"},{0x02, "two"},{0x03, "three"},{0x04, "four"},{0x05, "five"},{0x06, "six"},{0x07, "seven"},{0x08, "eight"},{0x09, "nine"}}},
{ 1,{{0x01, "zero"},{0x11, "one"},{0x12, "two"},{0x13, "three"},{0x14, "four"},{0x15, "five"},{0x16, "six"},{0x17, "seven"},{0x18, "eight"},{0x19, "nine"}}},
{ 2,{{0x02, "zero"},{0x21, "one"},{0x22, "two"},{0x23, "three"},{0x24, "four"},{0x25, "five"},{0x26, "six"},{0x27, "seven"},{0x28, "eight"},{0x29, "nine"}}},
{ 3,{{0x03, "zero"},{0x31, "one"},{0x32, "two"},{0x33, "three"},{0x34, "four"},{0x35, "five"},{0x36, "six"},{0x37, "seven"},{0x38, "eight"},{0x39, "nine"}}},
{ 4,{{0x04, "zero"},{0x41, "one"},{0x42, "two"},{0x43, "three"},{0x44, "four"},{0x45, "five"},{0x46, "six"},{0x47, "seven"},{0x48, "eight"},{0x49, "nine"}}}
};
int main(void)
{
//Accessing descrptn
printf("descrptn is %s\n", storage[0].test[0].descrptn);
printf("descrptn is %s\n", storage[0].test[1].descrptn);
printf("descrptn is %s\n", storage[0].test[2].descrptn);
printf("descrptn is %s\n", storage[0].test[3].descrptn);
//...
//This can continue as you have 5 storage elements
//defined, each of those containing 10 test elements.
return 0;
}
Ни 'storage' ни 'sample' не является структурой. Оба являются массивами. –
Но в любом случае ваш код недействителен и не компилируется, поэтому единственные возможные ответы на поставленный вопрос - это варианты «вы этого не делаете». –
Вместо улучшения вопроса вы добавили один нерелевантный тег и один устаревший тег. –