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

how to use pointer change array element

本文关键字:数组元素 指针 何使用      更新时间:2023-10-16

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

我尝试一些示例,例如**或&*我不擅长C/C++,我不知道我错在哪里。这是一个矩阵B[0] 是 xB[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 rotaten");
    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]但不是

当你这样做时:

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

变量 xy 包含当前B[0]B[1] 。 它们不是指针,因此当您稍后分配给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);
        }
    }
}