Указатели и определение типов данных - PullRequest
0 голосов
/ 05 марта 2019

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

Например:

char** a = ...;
*ptr = &a[1];

Как бы выпрочитай это?Пройдя по логике, каким будет окончательный тип данных ptr?Изменить: Это не функциональный код, это скорее упражнение, чтобы показать понимание указателей.

1 Ответ

0 голосов
/ 05 марта 2019

Для начала, a имеет тип char** или «указатель на указатель на символ».В зависимости от вашего контекста это также может быть концептуально обработано как указатель на c-строку или массив c-строк.

a[1] обрабатывает a как массив и получает элемент в индексе 1(второй элемент, так как 0 - первый).Это значение типа char* (указатель на символ или массив) располагается один после значения, на которое указывает a.

&a[1] дает ссылку на a[1].Это означает, что он дает вам значение указателя (в данном случае char**), указывающее на память, содержащую a[1].

*ptr =, разыменовывает местоположение ptr и устанавливает его в значение справасторона выражения.Поскольку &a[1] имеет тип char**, то *ptr имеет значение , вероятно также типа char**, хотя это может и не быть (что может быть нежелательно).

Если *ptr имеет тип char**, тогда ptr имеет тип char***.Семантическое значение этого кода может различаться в зависимости от контекста и того, что вы пытаетесь достичь, но я думаю, что a - это массив строк, а ptr устанавливается для указания на второй элементмассив.Имейте в виду, что вторым элементом массива является указатель, и ptr указывает не на то, на что указывает этот указатель, а на фактическое местоположение самого указателя.

Вот псевдокодированное объяснение со спискомстроки:

a = ["apple", "pear", "banana"]

После выполнения кода ...

ptr = ["pear", "banana"]

Где объекты, на которые указывает ptr, они совпадают с a,и вы просто просматриваете «подпредставление» списка a.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...