Указатели в C-программе - PullRequest
0 голосов
/ 27 июня 2018
int *ptr[10];
int a[10]={0,1,2,3,4,5,6,7,8,9};
*ptr[3]=a;
printf("%d",*ptr[3]);
return 0;

Мой вопрос о том, что я хочу напечатать 3 в массиве a, потому что int *ptr[10] означает десять указателей, но выдает ошибку.

Ответы [ 3 ]

0 голосов
/ 27 июня 2018

Исходя из того, что вы говорите, что пытаетесь напечатать "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]);
0 голосов
/ 27 июня 2018

Вам не нужен массив указателей для указания на массив. Один указатель в порядке. Все эти печати «3»

#include <stdio.h>

int main() {
    int *ptr;
    int a[10] = {0,1,2,3,4,5,6,7,8,9};
    ptr = &a[3];            /* point to specific element */
    printf("%d\n", *ptr);
    ptr = a;                /* point to whole array */
    printf("%d\n", ptr[3]);
    printf("%d\n", 3[ptr]); /* pointer arithmetic is weird */
    return(0);
}
0 голосов
/ 27 июня 2018

Если вы хотите поместить начало массива a в положение 3 массива массива ptr, вы должны удалить * в строке 3:

ptr[3] = a;

Кроме того, печать имеет некоторые проблемы, и вы можете написать, например, следующее, чтобы быть более понятным:

printf("%d", ptr[3][0]); // will print the first value of array "a"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...