Что int ** означает в C в этом контексте? - PullRequest
0 голосов
/ 26 октября 2019

Вот контекст:

int *t[10];
int n;

Мне говорят, что t-n имеет тип int **. Я точно не понимаю, что означает int **, это указатель на указатель? Почему вычитание таблицы указателей - int даст указатель на указатель на int? Когда мы ссылаемся на *t[0], ссылаемся ли мы на int* p на сам указатель, потому что он является элементом таблицы, или нам неявно нужен указатель, указывающий на слот, чем указатель на другое место?

Заранее спасибо, что объяснили мне это.

Ответы [ 3 ]

5 голосов
/ 26 октября 2019

Я не совсем понимаю, что означает int**, это указатель указателя?

Да.

  • int =целое число
  • int * = указатель на целое число
  • int ** = указатель на (целое указатель)
  • int *** = указатель на- (pointer-to- (pointer-to-integer))
  • (и т. д.)

Зачем вычитание таблицы указателей - int дастуказатель на указатель на int?

Поскольку в C (и C ++) массив при необходимости превращается в указатель на первый элемент. Например, int *t[10] - это массив из 10 элементов указателя на int. t может превратиться в указатель на t[0], то есть указатель на (pointer-to-int), int **. Этот указатель затем может быть использован для арифметики указателя (например, вычитание).

Таким образом, вычитание n из t даст вам int **, который указывает n элементов "перед" началом вашего массива из 10 элементов (что, кстати, не будет безопасным указателем)использовать, если только n не было нуля или небольшого отрицательного числа, поскольку оно указывало бы за допустимые границы памяти массива).

Когда мы ссылаемся на *t[0], мы ссылаемся наint* p на сам указатель, потому что он является элементом таблицы или нам неявно нужен указатель для указания на слот, чем указатель на другое место?

Я неуверен, я понимаю этот вопрос. Поскольку t[10] является массивом из 10 указателей (то есть 10 int *), это означает, что t[0] является единственным элементом в этом массиве и поэтому имеет тип int *. Поэтому *t[0] разыменовывает первый указатель в массиве, получая фактическое значение int, на которое указывает указатель.

0 голосов
/ 26 октября 2019

Если у вас есть TYPE a[N];, выражение массива a, если оно вычислено, создает указатель типа T *, указывающий на a[0]. Это иногда называют правилом «распада» массива в указатель C. * Если 1007 * равно int *, как в вашем случае, то TYPE * равно int **.

Поскольку ваш массив состоит из int * указателей, указатель, который индексирует массив, обязательно является указателем на этот тип элемента.

0 голосов
/ 26 октября 2019

что означает int**

Это тип указателя на указатель на int. Если вы разыменовываете переменную t этого типа (например, *t), вы получаете указатель на int. Если вы разыменовываете его дважды (например: **t), вы получите int.

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