如何使用指针从第一个元素到最后一个元素访问 3x3 数组

问题描述 投票:0回答:1

有没有办法使用指针指向数组的第一个元素,然后循环直到数组末尾?

#include <stdio.h>


int main(){
    int A[50][50][50];
    int sum;
    int i,j,k;
    int row,column,depth;
    int *ptr;
            do {
                printf("Please input row: ");//row
                scanf("%d", &row);
                printf("Please input column: ");//column
                scanf("%d", &column);
                printf("Please input depth: ");//depth
                scanf("%d", &depth);

                if (row <= 0 || column <=0 || depth <=0) {
                    printf("Wrong input!!!\n");
                }
            } while (row <= 0);

            printf("Row is equal to:%d\n", row);
            printf("Column is equal to:%d\n", column);
            printf("Depth is equal to:%d\n", depth);

            for (i=0;i<row ;i++) {
                for(j=0;j<column;j++){
                    for(k=0;k<depth;k++){
                        printf("Please input value for Array[%d][%d][%d]: ", i + 1,j+1,k+1);
                        scanf("%d", &A[i][j][k]);
            }
                }
                    }
            ptr = &A[0][0][0];

        


  printf("\nThe sum of all elements is: %d\n", sum);



}






我正在尝试使用指针计算所有元素的总和并尝试使用循环,但它不起作用是否还有其他方法可以访问它

这是我的循环的样子。

for(i=0;i<row;i++){
                sum+=*(ptr+i);
                    for(j=0;j<column;j++){
                    sum+=*(ptr+j);
                        for(k=0;k<depth;k++){
                            sum+=*(ptr+k);
            }
                }
                    }

我目前正在学习 C 编程中的指针课程,所以我只知道基础知识。

arrays c pointers
1个回答
0
投票

您需要正确索引指针并确保正确访问 3D 数组的元素。您当前的实现在指针算术方面存在一些问题。

看这段代码

#include <stdio.h>

int main() {
    int A[50][50][50];
    int sum = 0;
    int i, j, k;
    int row, column, depth;
    int *ptr;

    do {
        printf("Please input row: ");
        scanf("%d", &row);
        printf("Please input column: ");
        scanf("%d", &column);
        printf("Please input depth: ");
        scanf("%d", &depth);

        if (row <= 0 || column <= 0 || depth <= 0) {
            printf("Wrong input!!!\n");
        }
    } while (row <= 0 || column <= 0 || depth <= 0);

    printf("Row is equal to: %d\n", row);
    printf("Column is equal to: %d\n", column);
    printf("Depth is equal to: %d\n", depth);

    for (i = 0; i < row; i++) {
        for (j = 0; j < column; j++) {
            for (k = 0; k < depth; k++) {
                printf("Please input value for Array[%d][%d][%d]: ", i + 1, j + 1, k + 1);
                scanf("%d", &A[i][j][k]);
            }
        }
    }

    
    ptr = &A[0][0][0];

    
    for (i = 0; i < row; i++) {
        for (j = 0; j < column; j++) {
            for (k = 0; k < depth; k++) {
                sum += *ptr; 
                ptr++;
            }
        }
    }

    printf("\nThe sum of all elements is: %d\n", sum);

    return 0;
}

确保将 sum 初始化为 0 不要为每个维度使用单独的循环,并记住指针直接在最内层循环内递增 访问 *ptr 处的值后,递增 ptr 以指向下一个整数 确保在 do while 循环中检查所有维度的正值

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