[英]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
兩個input
和print_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 += i
被a++
代替的示例輸出:
[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.