указатель на массив - PullRequest
1 голос
/ 18 июля 2009

У меня есть указатель на массив, и я не могу получить доступ к членам массива. Чтобы сделать его более точным, пожалуйста, посмотрите код ниже:

       int struc[2] = {6,7};
       int (*Myval)[2];
       Myval =&struc;
         Now the Myval is pointing to the start of the array and upon dereferencing the pointer we would get the 1st element of the array i.e


      printf("The content of the 1st element is %d\n",(*Myval[0])); 
      gives me the first elemnt which is 6.            
      How would i access the 2nd elemnt of the array using the same pointer.

Если бы я делал Myval ++, он увеличился бы на 8, поскольку размер массива равен 8. какие-либо предложения или идеи ??

Спасибо и всего наилучшего Мэдди

Ответы [ 3 ]

4 голосов
/ 18 июля 2009

Я думаю, что хотя int (*)[2] является допустимым типом для указания на массив из двух int с, это, вероятно, излишнее для того, что вам нужно, то есть тип указателя для доступа к членам массива. В этом случае просто int *, указывающий на целое число в массиве, - это все, что вам нужно.

int *p = struc; // array decays to pointer to first element in assignment

p[0]; // accesses first member of the array
p[1]; // accesses second member of the array

Как уже указывали другие, если вы используете указатель на массив, вы должны разыменовать указатель перед использованием операции индексации в результирующем массиве.

int (*Myval)[2] = &struc;

(*Myval)[0]; // accesses first member of the array
(*Myval)[1]; // accesses second member of the array

Здесь помогает синтаксис объявления C 'объявление использования зеркал'.

2 голосов
/ 18 июля 2009

Вы бы не разыменовывали, а подстреливали, как с другими указателями

Myval[0][1] // accesses second element

Первый [0], вероятно, немного сбивает с толку, поскольку предполагает, что вы работаете с массивом. Чтобы было ясно, что вы работаете с указателем, я бы использовал разыменование

(*Myval)[1] // accesses second element

(*Myval) разыменовывает указатель массива и возвращает массив, а следующие операции с нижним индексом адресуют и разыменовывают нужный элемент.

0 голосов
/ 18 июля 2009

Это также должно работать:

*( Myval[0] + 1 )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...