私のコードは、* .mtxファイルから疎行列を読み取り、コンソールで行列を出力する必要があります(実際の場合は、疎な行列を返すようにします)。C++コードで値の代わりにアドレスを取得するのはなぜですか?
マイコード:
#include <stdio.h>
#include <stdlib.h>
#include <iostream>
#include <fstream>
#include <algorithm>
using namespace std;
struct MatriceRara
{
int *Linie, *Coloana, *Valoare;
int nrElemente, nrLinii, nrColoane;
};
MatriceRara Read(const char* mtx) {
const char * mtx_file = mtx;
ifstream fin(mtx_file);
MatriceRara matR;
int nrElemente, nrLinii, nrColoane;
// skip header:
while (fin.peek() == '%') fin.ignore(2048, '\n');
// read parameters:
fin >> nrLinii >> nrColoane >> nrElemente;
matR.nrElemente = nrElemente;
matR.nrLinii = nrLinii;
matR.nrColoane = nrColoane;
cout << "Number of rows: " << matR.nrLinii <<endl;
cout << "Number of columns: " << matR.nrColoane << endl;
cout << "Number of not null values: " << matR.nrElemente << endl;
for (int i = 0; i< nrElemente; i++)
{
int *m ,*n,*data;
fin >> (int &) m >> (int &) n >> (int &) data;
matR.Linie = m;
matR.Coloana = n;
matR.Valoare = data;
//only for test:
cout<<matR.Linie << " " << matR.Coloana << " " << matR.Valoare <<endl;
}
//return matR;
}
int main() {
MatriceRara a = Read("Amica.mtx");
}
マイ出力:
Number of rows: 5
Number of columns: 5
Number of not null values: 8
0x7fff00000001 0x7f4400000001 0x1
0x7fff00000000 0x7f4400000001 0x1
0x7fff00000000 0x7f4400000001 0x1
0x7fff00000000 0x7f4400000001 0x1
0x7fff00000000 0x7f4400000001 0x1
0x7fff00000000 0x7f4400000001 0x1
0x7fff00000000 0x7f4400000001 0x1
0x7fff00000000 0x7f4400000001 0x1
あなたは私の出力で見ることができるように、それはアドレスではなく、値を印刷します。 ありがとうございました!
あなたはポインタを出力しているので。 – drescherjm
'int * m、* n、* data; fin >>(int&)m >>(int&)n >>(int&)data; 'は未定義の動作です。 – drescherjm
@drescherjm私も願っています。私はOPがそのコードを最小限にしようとしたと思う。 – fjardon