2016-04-29 81 views
0

我的代碼從* .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 

所以,你可以在我的輸出中看到的,這是打印的地址,而不是值。 非常感謝!

+1

因爲你輸出指針。 – drescherjm

+0

'int * m,* n,* data; (int&)m >>(int&)n >>(int&)data;'是未定義的行爲。 – drescherjm

+0

@drescherjm我也希望。我認爲OP會盡量減少代碼。 – fjardon

回答

4

您宣佈以下成員的指針爲int:

int *Linie, *Coloana, *Valoare; 

然後打印這些指針:

cout<<matR.Linie << " " << matR.Coloana << " " << matR.Valoare <<endl; 

所以,你得到你問:指針的值(如地址)

-4

您所有的變量和int *類型的類成員的確應該是int類型。目前它們是未初始化的指針,而它們確實是整數。

+0

爲什麼你首先聲明爲指針?在這裏,在這個例子中,它們應該是int類型的,而不是指向int的指針。在你的原始代碼中,你a)聲明瞭三個未初始化的指針; b)將它們(不是它們指向未初始化的未定義位置)用作整數位置。 Linie,Coloana和Valoare也應該是'int's,在你當前的代碼中它們只是未初始化的指針。 – bipll

1

因爲變量Linie,ColoanaValoare是指針。

您必須通過在*之前取消引用指針。

int value; 
value = *m; 

,如果你要打印的值,再在這裏:

cout<< *matR.Linie << " " << *matR.Coloana << " " << *matR.Valoare << endl; 
相關問題