如何使用指针更改数组元素

时间:2019-05-31 12:59:39

标签: c++

我尝试使用指针更改数组元素,但是我失败了。 它没有改变 我该怎么办?

我尝试一些例子,例如**或&* 我不擅长C / C ++,我不知道哪里错了。 这是一个矩阵 B [0]是x B [1]是y

#include<cstdio>
#include<cstring>
#include<cstdlib>
int rotate(int A[10][10],int *PointerX,int *PointerY){
    int x = *PointerX;
    int y = *PointerY;
    printf("into rotate\n");
    printf("B:[%d][%d]",x,y);
    int B[10][10];
    initialize(B);
    for(int i=0,m=x-1;i<=x;i++,m--){
        for(int j=0;j<y;j++){
            B[j][m] = A[i][j];
            if(i==x&&j==y-1){
                x = j+2;
                y = i-1;
                printf("\nA:[%d][%d]\n",x,y);
            }
        }
    }
    for(int i=0;i<10;i++){
        for(int j=0;j<10;j++){
            A[i][j] = B[i][j];
        }
    }
    return 0;
}
int ScanData(int A[10][10],int operate[10000],int B[3]){
    printf("DATA:\n");
    scanf("%d%d%d",&B[0],&B[1],&B[2]);
    for(int i=0;i<B[0];i++){
        for(int j=0;j<B[1];j++){
            scanf("%d",&A[i][j]);
        }
    }
    for(int i = 0;i<B[2];i++){
        scanf("%d",&operate[i]);
    }
    return B[2];
}
int main(){
    int A[10][10];
    initialize(A);
    int operate[10000];
    int B[3];
    int operating = ScanData(A,operate,B);
    for(int i=0;i<operating;i++){
        if(operate[i]==0){
            rotate(A,&B[0],&B[1]);
        }else if(operate[i]==1){
            flip(A,B[0],B[1]);
        }
    }
    return 0;
}

我希望函数旋转可以更改B [0]和B [1] 但不是

1 个答案:

答案 0 :(得分:1)

执行此操作时:

int x = *PointerX;
int y = *PointerY;

变量xy包含B[0]B[1] current 值。它们不是指针,因此当您以后分配给xy时,您只是分配给副本。

删除xy,并用*PointerX*PointerY替换它们。

for(int i=0,m=*PointerX-1;i<=*PointerX;i++,m--){
    for(int j=0;j<*PointerY;j++){
        B[j][m] = A[i][j];
        if(i==*PointerX&&j==*PointerY-1){
            *PointerX = j+2;
            *PointerY = i-1;
            printf("\nA:[%d][%d]\n",*PointerX,*PointerY);
        }
    }
}