我寫了兩個函式, readMatrix 分配一個雙指標并從鍵盤獲取輸入,第二個函式是列印函式。
當我在主函式中呼叫列印函式時,它不能完全作業。
這是代碼:
void print(int** mat, int lin, int col) {
int i,j;
printf("Matrix is:\n");
for(i=0; i<lin; i ) {
for(j=0; j<col; j ) {
printf("%d ", *(*(mat i) j));
}
printf("\n");
}
}
int** readMatrix(int** mat, int lin, int col) {
int x;
int i,j;
mat==(int**)malloc(lin*sizeof(int*));
for(x=0; x<lin; x ) {
mat[x]=(int*)malloc(col*sizeof(int));
}
for(i=0; i<lin; i ) {
printf("Line %d: ", i);
for(j=0; j<col; j ) {
scanf("%d", &mat[i][j]);
}
}
}
int main()
{
int lin, col;
int i,j;
printf("Enter number of lines: ");
scanf("%d", &lin);
printf("Enter number of cols: ");
scanf("%d", &col);
int** mat = readMatrix(mat,lin,col);
print(mat,lin,col);
return 0;
}
接受輸入后,我收到訊息“矩陣是”,但矩陣沒有出現,為什么?
如果我在 readMatrix 函式中呼叫 print 函式,它可以作業,但是如果我在 main 中呼叫它為什么不作業?
謝謝。
uj5u.com熱心網友回復:
readMatrix接受mat作為引數,但這沒有用,因為它只接收它的值,而它還沒有值。(為了能夠改變呼叫例程中的變數,例程必須接收一個指向它的指標,而不是它的值。)
readMatrix宣告回傳int **但沒有return宣告。
mat==(int**)malloc(lin*sizeof(int*));使用==,它比較值。它不執行任務。
mat從 的宣告中洗掉引數readMatrix。mat從對 的呼叫中洗掉引數readMatrix。更正==到=。添加一條return陳述句,該陳述句mat從 中執行的分配回傳 的值readMatrix。
uj5u.com熱心網友回復:
函式中未使用引數 mat ,readMatrix因為其值 id 被覆寫
int** readMatrix(int** mat, int lin, int col) {
int x;
int i,j;
mat==(int**)malloc(lin*sizeof(int*));
//...
此外,該函式雖然回傳型別不為空,但什么都不回傳。
所以這個記錄
int** mat = readMatrix(mat,lin,col);
呼叫未定義的行為。
您需要宣告該函式至少是謊言
int** readMatrix( int lin, int col);
并在函式的末尾寫
return mat;
例如
int** readMatrix(int lin, int col) {
int **mat==(int**)malloc(lin*sizeof(int*));
//...
return mat;
}
該函式將被呼叫
int** mat = readMatrix(lin,col);
同樣在 main 中,當不再需要陣列時,您應該釋放所有分配的記憶體。
例如
for ( i = 0; i < lin; i )
{
free( mat[i] );
}
free( mat );
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/342864.html
