簡體   English   中英

C,使用指針掃描和打印矩陣

[英]C, scanning and printing Matrix using Pointers

void input(int (*a)[3]){

    int i, j;
    for(i = 0; i < 3; i++){
        a += i;
        for(j = 0; j < 3; j++)
            scanf("%d",*a+j);

    }
}

void print_matrix(int (*a)[3]){

    int i, j;
    for(i = 0; i < 3; i++){
        a += i;
        for(j = 0; j < 3; j++)
            printf("%d ",*(*a+j));
        printf("\n");
    }

    putchar('\n');
}

int main(){

    int matrix[3][3];
    input(matrix);

    printf("Printing matrix using function: \n");
    print_matrix(matrix);


    int i, j;
    for(i = 0; i < 3; i++){
        for(j = 0; j < 3; j++)
            printf("%d ", matrix[i][j]);
        printf("\n");
    }
    return 0;
}

如果我這樣輸入矩陣:

1 1 1

2 2 2

3 3 3

使用功能打印矩陣會產生正確的輸出:1 1 1 2 2 2 3 3 3。

但是使用兩個循環打印矩陣會產生如下輸出:

1 1 1

2 2 2

-5555 0 -22222

所以我顯然有一些錯誤,但我不知道在哪里。 我在這里不明白的是為什么這不適用於矩陣的第三行。

注意:我知道可以不使用指針和函數來完成此操作,但這不是重點,我想完全像這樣做,只是無法弄清楚我做錯了什么。

替換a += i; a += 1; 在兩個函數中, void input(int (*a)[3])void print_matrix(int (*a)[3])

原因是當我為2時,它超出了邊界。 您要添加2。

同樣,在第二個for循環之后移動a += 1

問題是你如何操縱a兩個inputprint_matrix

input

    a += i;     // problem is here
    for(j = 0; j < 3; j++)
        scanf("%d",*a+j);

在第一次迭代中,因為添加了0,所以a很好。 第二點也很好,因為添加了1將其移至下一行。 但是在第三處,它增加了2,將其移出矩陣的邊界。

您可以簡單地將a += i替換a += i a++ ,但是如果這樣做,則將所有內容從應有的位置向下寫入一行。

帶有a += ia++代替的示例輸出:

[dbush] /tmp/x1
1 1 1
2 2 2
3 3 3
Printing matrix using function:
1 1 1
2 2 2
3 3 3

0 0 -668873792
1 1 1
2 2 2

為了使其正常工作,請將a++移到外部for循環的底部。

input

for(i = 0; i < 3; i++){
    for(j = 0; j < 3; j++)
        scanf("%d",*a+j);
    a++;
}

print_matrix

for(i = 0; i < 3; i++){
    for(j = 0; j < 3; j++)
        printf("%d ",*(*a+j));
    printf("\n");
    a++;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM