Чтение указателя - PullRequest
0 голосов
/ 23 мая 2019

у меня есть вектор int a[100]. Я прочитал вектор и дал ему значения 1,2,3. Теперь я хочу использовать указатель int *pa=&a[100]. У меня вопрос, могу ли я прочитать указатель через scanf и дать vector a[100] несколько новых значений?

Я пытался сделать это:

for(i=0;i<n;i++)
{
    scanf("%d",&a[i])
}

для вектора и для указателя:

for(i=0;i<n;i++)
{
    scanf("%d",&pa)
}

Это моя главная:

#include <stdio.h>
#include <stdlib.h>
int main()
{
    int a [100],n,i;
    scanf("%d",&n);
    for(i=0;i<n;i++)
    {
        scanf("%d",&a[i]);
    }
    for(i=0;i<n;i++)
    {
        printf("%d",a[i]);
    }
    for(i=0;i<n;i++)
    {
        scanf("%d",&pa);
    }
    for(i=0;i<n;i++)
    {
        printf("%d",pa);
    }
    return 0;
}

printf("%d",pa) дает мне 999, а вектор все еще имеет значения 1,2,3.

1 Ответ

1 голос
/ 23 мая 2019

Следующий код показывает, что pa указывает на объект, а *pa обозначает объект.

#include <stdio.h>


int main(void)
{
    //  Set size of array.
    static const int N = 100;

    //  Define array.
    int a[N];

    //  Initialize array.
    for (int i = 0; i < N; ++i)
        a[i] = i+1;

    //  Define a pointer and initialize it to point to element a[0].
    int *pa = &a[0];

    /*  Scan as if "34" were in the input.  Observe that we pass pa, not &pa.
        &pa is the address of pa.  pa is the value of pa.  Its value is the
        address of a[0].
    */
    sscanf("34", "%d", pa);

    //  Print a[0].  This will be "34".
    printf("%d\n", a[0]);

    /*  Print *pa.  Note that we use *pa, which is the object pa points to.
        That objects is a[0], so the result is "34".
    */
    printf("%d\n", *pa);

    /*  Change pa to point to a different element.  Note that we use "pa =
        address" to set the value.  This is different from the initialization,
        which had "int *pa = value".  That is because declarations need the
        asterisk to describe the type, but an assignment just needs the name;
        it does not need the asterisk.
    */
    pa= &a[4];

    //  Print *pa.  Since pa now points to a[4], this will print "5".
    printf("%d\n", *pa);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...