在C中,我不确定指针的输出是如何更新的?

问题描述 投票:-1回答:2

我正在尝试跟踪代码来练习我即将进行的测试。我通常打印步骤来查找值如何更新,但对于我当前的代码,我不能这样做。有人会介意帮我理解追踪吗?

#include <stdio.h>
#include <stdlib.h>
void print(int *info, int size)
{
    int i,*data,*dataptr;
    for (i=0; i<size; i++)
        printf("info[%d]=%d\n",i,info[i]);
    printf("\n");
    return;
}
int main()
{
    int i,*data,*dataptr;
    data = (int *)malloc(4*sizeof(int));

    for (i=0; i<4; i++)
        data[i]=3*i;
            print(data,4); //output: 0 3 6 9 <-I understand this output

    *data = 5; //I get  
    dataptr = data;//
    dataptr++; //
    *dataptr = 1;// 
    print(data,4); //output: 5 1 6 9 

    *(data+2) = 4;
    *(dataptr+2)=2;

    print(data,4);//output: 5 1 4 2

    free(data);
return 0;
}
c function loops pointers
2个回答
2
投票

下面我评论您的代码,解释指针指向的位置。

#include <stdio.h>
#include <stdlib.h>
void print(int *info, int size)
{
    int i,*data,*dataptr;//what you want data, dataptr here? they are unused
    for (i=0; i<size; i++)
    printf("info[%d]=%d\n",i,info[i]);
    printf("\n");
    return;
}
int main()
{
    int i,*data,*dataptr;
    data = (int *)malloc(4*sizeof(int)); //From now on the data is an array of 4 element. Is equal with statement -> int data[4];

    for (i=0; i<4; i++)
    data[i]=3*i;
    print(data,4);

    *data = 5; //This line change the value of first element of array  
    dataptr = data;//point to first element of array(data[0])
    dataptr++; //increment the pointer by one, so point to the second element of array(data[1])
    *dataptr = 1;// change the value of second element of array(data[1])
    print(data,4); //output: 5 1 6 9 

    *(data+2) = 4;//change the value of third element of array. is equal data[2] = 4
    *(dataptr+2)=2;//dataptr point to second element, increament by 2, so now point to fourth element and change his value

    print(data,4);//output: 5 1 4 2

    free(data);
    return 0;
}

我不明白你实际上不能打印什么。如果你的意思是dataprt你可以喜欢

printf("dataptr point to %d\n", *dataptr);

希望这有助于您执行代码。


0
投票
int main()
{
    int i,*data,*dataptr;
    data = (int *)malloc(4*sizeof(int));

    for (i=0; i<4; i++)
        data[i]=3*i;
    print(data,4); //output: 0 3 6 9 <-I understand this output

    *data = 5; // *data is the same as data[0] so you have 5 3 6 9  
    dataptr = data; // 
    dataptr++; // if you print dataptr you will have 3 6 9
    *dataptr = 1;// dataptr : 1 6 9
    print(data,4); //output: 5 1 6 9 ;

    *(data+2) = 4; // same as data[2] = 4 
    *(dataptr+2)=2; // same as dataptr[2] = 2

    print(data,4);//output: 5 1 4 2

    free(data);
return 0;
}

不要忘记dataptr是data ++,因此它将指向* data的下一个值

© www.soinside.com 2019 - 2024. All rights reserved.