Исходя из того, что вы говорите, что пытаетесь напечатать "3" через
printf("%d",*ptr[3]);
и для определения массива a
, я думаю, вы пытаетесь настроить *ptr
в качестве псевдонима для a
.
В этом случае, однако, у вас есть проблема с приоритетом оператора: оператор индексирования []
имеет более высокий приоритет, чем оператор разыменования (*
), поэтому *ptr[3]
означает «объект, на который указывает элемент 3 из ptr
", тогда как на самом деле вам нужен" элемент 3 массива, на который указывает ptr
. " Перечитайте их, пока не узнаете и не поймете важную разницу между ними.
Но проблема не ограничивается этим выражением; связанные с этим проблемы приоритетов распространяются повсюду:
указатель на массив из десяти int
с будет объявлен так:
int (*ptr)[10];
с этим объявлением, вы бы присвоили ptr
для указания на a
с помощью простого:
ptr = &a;
сделав это, вы напечатаете элемент 3 указанного массива следующим образом:
printf("%d", (*ptr)[3]);
В качестве альтернативы , возможно, вы хотите сделать ptr
(не *ptr
) псевдонимом a
. В этом случае вам нужен указатель на один int
, а не указатель на массив и, конечно, не на массив указателей:
int *ptr;
Затем вы можете назначить значение указателя просто через
ptr = a;
. Установив ptr
в качестве псевдонима для a
, вы можете использовать его как таковой в вашем printf
вызове:
printf("%d", ptr[3]);