Справка по указателю: разыменование указателя на структуру, обращающуюся к данным внутри нее - PullRequest
0 голосов
/ 27 апреля 2018

У меня возникли проблемы, когда я не могу понять, как работает определенная строка кода. По некоторым причинам это просто не щелкает. Эта строка кода обычно используется для абстрагирования файловых дескрипторов в доменных сокетах Unix.

Контекст:

typedef struct myStruct {
    char charArray[10];
} myStruct; 

myStruct myStructure;
myStruct *ptrToStruct = &myStructure;

/* This should change myStructure.charAarray[0] to equal a */
*(ptrToStruct.charArray) = 'a'; 

Я понимаю, что массив по сути является указателем, который указывает на первый индекс в массиве, но указатель не имеет данных (charArray).

Причина, по которой мне так трудно это понять, заключается в том, что ptrToStruct пытается получить доступ к элементу данных указателя charArray, но у указателя нет элемента данных charArray, а затем он разыменовывает его.

Это что-то вроде (*ptrToStruct).(*charArray) = 'a'? Но оператор разыменования исключается? Я прошу прощения за то, что вообще неясно.


ОБНОВЛЕНИЕ : На вопрос дан ответ. Я неправильно читал код, код был на самом деле *(myStructure.charArray), и именно так он изменял первый индекс массива. Я должен был также понять это, потому что, как объяснил Сид, указатели не имеют оператора ..

1 Ответ

0 голосов
/ 27 апреля 2018

ptrToStruct не является структурой, поэтому

ptrToStruct.charArray

должно быть

(*ptrToStruct).charArray

или

ptrToStruct->charArray

Тогда да, вы можете установить символ, используя

*( ptrToStruct->charArray ) = 'a';

или

( ptrToStruct->charArray )[0] = 'a';

Это ничем не отличается от

char charArray[10];
*charArray = 'a';

и

char charArray[10];
charArray[0] = 'a';
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...