2015-10-13 9 views
0

Я пытаюсь отправить указатель матрицы для работы для печати значений. Однако мой следующий код печатает некоторые длинные номера, поэтому я предположил, что он печатает адреса вместо этого! Как распечатать значение матрицы после передачи указателя?Вывести значения матрицы, передав ее указатель на функцию

#include <stdio.h> 
#include <string.h> 
#include <math.h> 

void printing(int *edge); 
void main(){ 

int N=3; 
int i,j; 

int *edge[N]; 
for (i = 0; i < N; i++){ 
    *(edge+i) = (int *)malloc(N * sizeof(int)); 
} 

srand(0); 
for(i = 0; i < N; i++){ 
    for(j = 0; j < N; j++){ 
     if(i == j) 
      *(*(edge+i)+j) = 0; 
     else 
      *(*(edge+i)+j) = 1; //rand() % 10; 
    } 
} 

printing(edge); // Pass the pointer of the matrix 


} 


void printing(int *edge){ 

int i,j; 
int N= 3; 
for(i = 0; i < N; i++){ 
    for(j = 0; j < N; j++){ 
     printf("%d \t", ((edge+i)+j)); // I think I have to do something in this line. 
    } 
     printf("\n"); 
} 

} 
+0

Это не C++ –

+0

Прошу прощения. Я допустил ошибку. –

+0

Компиляция с [предупреждениями] (http://pastebin.com/RFuH5wAG) on. –

ответ

2

Неверный тип параметра printing. Он должен быть int *edge[]. Затем, когда вы печатаете, используйте *(*(edge+i)+j), или еще лучше edge[i][j].

Результат:

void printing(int *edge[]){ 
    int i,j; 
    int N = 3; 
    for(i = 0; i < N; i++){ 
     for(j = 0; j < N; j++){ 
      printf("%d \t", edge[i][j]); 
     } 
     printf("\n"); 
    } 
} 

Кроме того, убедитесь, что #include <stdlib.h>, так как это необходимо для malloc и srand.

+0

Я бы предложил избегать разыменования указателя, потому что без указания размера данных внутри +1 может не переместиться в правильное место памяти в зависимости от реализации компилятора. Также для вашего кода вы забыли [] в определении своей функции. – arduic

+0

@arduic Исправлен код. – dbush

+0

Большое спасибо .. он исправил его –

Смежные вопросы