В языке C * p = vec [n] - это то же самое, что p = & vec [n]? - PullRequest
0 голосов
/ 18 октября 2018

Я самостоятельно изучаю указатели на C, и мой вопрос: *p=vec[n] - это то же самое, что и запись p=&vec[n], где n - это просто индекс, а p - указатель?

Ответы [ 3 ]

0 голосов
/ 18 октября 2018

Это два различных выражения:

Указатель - это тип, который содержит адрес фрагмента памяти.Поэтому, когда вы пишете:

p = &vec[n]

Указатель будет иметь тот же адрес, что и адрес n-го элемента vec

Когда вы пишете

*p = vec[n]

На самом деле вы утверждаете, что память, которая находится по адресу p, должна иметь такое же содержимое, как n элемент vec.

Следующее может прояснить это:

      | original        | p = &vec[n]     | *p = vec[n]
------+-----------------+-----------------+----------------
data  | Address Content | Address Content | Address Content
------+-----------------+-----------------+----------------
p     | 0x12345 0000000 | 0xabcde 0000005 | 0x12345 0000005
vec[n]| 0xabcde 0000005 | 0xabcde 0000005 | 0xabcde 0000005
0 голосов
/ 18 октября 2018

Вот грубое графическое объяснение в дополнение к другим ответам.

Answer illustration

0 голосов
/ 18 октября 2018

Нет, это не так.

Когда вы делаете *p = ..., вы присваиваете значение, на которое указывает p.

С p = ... вы делаете p точку в другом месте.

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