#include <stdio.h>
#include <stdlib.h>
#include <iostream>
using namespace std;
// protoptipos
void load(int *mat, char, char);
void show(int *mat, char, char); // void show(int mat[][3], int);
int main(int argc, char *argv[]){
int vector[4] = { 9, 8, 7, 6 };
int matrixA[3][2] = { { 1, 2 }, { 3, 4 }, { 5, 6 } };
//int matrixB[3][2] = { 1, 2, 3, 4, 5, 6 };// == { { 1, 2 }, { 3, 4 }, { 5, 6 } }
int matrixC[3][3] = { 1, 2, 3, 4, 5, 6, 7, 8, 9 }; // == {{ 1, 2, 3 }, { 4, 5, 6 }, { 7, 8, 9 } }
int *ptrMatrixA = &matrixA[0][0]; // puntero a la matrixA
int *ptrVector = &vector[0]; // puntero a vector
//int *ptr1Vector = ptrVector; // puntero a ptr
cout << "vector[4] = { 9, 8, 7, 6 }" << endl;
cout << "matrixA[3][2] = { { 1, 2 }, { 3, 4 }, { 5, 6 } };\n" << endl;
// impresion de elementos
// impresion del 1er elemento usando subindices
int mat_fila1col1 = matrixA[0][0]; // usando el nombre de la matrix mas dos subindices, PERO NO OPERA EN LLAMADA DE FUNCIONES
cout << "Mat: (fila1,col1) = " << mat_fila1col1 << endl; // 1
int vec_col1 = vector[0]; // usando subindices
cout << "Vect: col1 = " << vec_col1 << endl; // 9
/////////////
// impresion del 2do elemento usando subindices
int fila1col2_mat = matrixA[0][1]; // usando el nombre de la matrix mas dos subindices
cout << "\nMat: (fila1,col2) = " << fila1col2_mat << endl; // 2
int vec_col2 = vector[1]; // usando subindices
cout << "Vect: col2 = " << vec_col2 << endl; // 8
/////////////
// impresion del 3cer elemento usando subindices
int fila2col1_mat = matrixA[1][0];
cout << "\nMat: (fila2,col1) = " << fila2col1_mat << endl; // 3
int vec_col3 = vector[1]; // usando subindices
cout << "Vect: col2 = " << vec_col3 << endl; // 7
/////////////
// Impresion del 1er elemento usando punteros
int pmat_fila1col1 = *(ptrMatrixA+0); // se trata la matriz como un arreglo unidimensional
cout << "\nMat: (fila1,col1) = " << pmat_fila1col1 << endl; // 1
int pvec_col1 = *(ptrVector+0);
cout << "Vect: col1 = " << pvec_col1 << endl; // 9
// Impresion del 2do elemento usando punteros
int p1mat_fila1col2 = *(ptrMatrixA+1) ;
cout << "\nMat: (fila1,col2) = " << p1mat_fila1col2 << endl; // 2
int p1vec_col2 = *(ptrVector+1);
cout << "Vect: col2 = " << p1vec_col2 << endl; // 8
// Impresion del 1er elemento usando punteros con un subindice []
int p2mat_fila1col1 = ptrMatrixA[0] ; // usando 1 subindice
cout << "\nMat: (fila1,col1) = " << p2mat_fila1col1 << endl; // 1
int p2vec_col1 = ptrVector[0]; // usando subindice
cout << "Vect: col1 = " << p2vec_col1 << endl; // 9
// Impresion del 2do elemento usando punteros con un subindice []
int p3mat_fila1col2 = ptrMatrixA[1] ; // usando 1 subindice
cout << "\nMat: (fila1,col2) = " << p3mat_fila1col2 << endl;
int p3vec_col2 = ptrVector[1]; // usando subindice
cout << "Vect: col2 = " << p3vec_col2 << endl; // 8
// Impresion del 3er elemento usando punteros con un subindice []
int p4mat_fila2col1 = ptrMatrixA[2] ; // usando 1 subindice
cout << "\nMat: (fila2,col1) = " << p4mat_fila2col1 << endl; // 3
int p4vec_col3 = ptrVector[2]; // usando subindice
cout << "Vect: col3 = " << p4vec_col3 << endl; // 7
// Impresion del 4to elemento usando el nombre con dos subindices
int p5mat_fila2col2 = matrixA[1][1] ; // usando 2 subindices
cout << "\nMat: (fila2,col2) = " << p5mat_fila2col2 << endl; // 4
// Impresion del 4to elemento usando el puntero nombre con dos subindices entre []
//int p5mat_fila2col2 = ptrMatrixA[1][4] ; // usando 2 subindices no se puede de esta forma
//cout << "\nMat: (fila2,col2) = " << p5mat_fila2col2 << endl; // 4
// Impresion del 4to elemento usando el puntero nombre con dos subindices pero sin []
unsigned char cols = 2, fila=1, col=1; // en base cero
int p6mat_fila2col2 = *(ptrMatrixA + (fila*cols) + col); // usando 2 subindices con doble [] no se puede con punteros, de esta forma si
cout << "\nMat: (fila2,col2) = " << p6mat_fila2col2 << endl; // 4
// Impresion del 4to elemento usando el puntero nombre con dos subindices pero sin []
int p7mat_fila2col2 = *(ptrMatrixA + (fila*cols) + col );
cout << "\nMat: (fila2,col2) = " << p7mat_fila2col2 << endl; // 4
// [[ (0,0) = 1, (0,1) =2 ]
// [ (1,0) = 3, (1,1) =4 ]
// [ (2,0) = 5, (2,1) =6 ]]
// [[ (1,1) = 1, (1,2) =2 ]
// [ (2,1) = 3, (2,2) =4 ]
// [ (3,1) = 5, (3,2) =6 ]]
// Impresion del 4to elemento usando el puntero nombre con dos subindices pero con un solo []
int p8mat_fila2col2 = ptrMatrixA[ ( fila * cols ) + col ];
cout << "\nMat: (fila2,col2) = " << p8mat_fila2col2 << endl; // 4
// Impresion del 6to elemento usando el puntero nombre con dos subindices pero sin []
fila=2, col=1; // en base cero
int p8mat_fila3col2 = ptrMatrixA[ ( fila * cols ) + col ];
// No se puede con el nombre la matrix , requiere ser el nombre del puntero // int p8mat_fila3col2 = matrixA[ (fila*cols) + col ]
cout << "\nMat: (fila2,col2) = " << p8mat_fila3col2 << endl; // 4
int p5vec_col2 = *( vector + 1 );
cout << "\nVec: (col2) = " << p5vec_col2 << endl; // 8
int p6vec_col3 = *( vector + 2 );
cout << "\nVec: (col3) = " << p6vec_col3 << endl; // 7
// puntero hacia el inicio de cada fila
int p9mat_fila1 = *( matrixA [ 0 ] ); // muy interezante apunta al inicio de cada fila
cout << "\nMat: (fila1) = " << p9mat_fila1 << endl; // 1
int p9mat_fila2 = *( matrixA [ 1 ] );
cout << "\nMat: (fila2) = " << p9mat_fila2 << endl; // 3
int p9mat_fila3 = *( matrixA [ 2 ] );
cout << "\nMat: (fila3) = " << p9mat_fila3 << endl; // 5
int p1matb_fila1 = *( matrixC [ 0 ] );
cout << "\nMat: (fila1) = " << p1matb_fila1 << endl; // 1
p1matb_fila1 = *( matrixC [ 1 ] );
cout << "\nMat: (fila1) = " << p1matb_fila1 << endl; // 4
p1matb_fila1 = *( matrixC [ 2 ] );
cout << "\nMat: (fila1) = " << p1matb_fila1 << endl; // 7
//////////////////////////////////////////////////////////////////
int mat[ 2 ][ 3 ];// = { { 0, 1, 2 }, { 3, 4, 5 } };
load( &(mat[ 0 ][ 0 ]), 2, 3); // == load((int*)mat, 2, 3);
show( &(mat[ 0 ][ 0 ]), 2, 3);
getchar();
return 0;
system("PAUSE");
return 0;
}
void load(int *pmat, char rows, char cols){
char c, r;
printf("\n");
for(r = 0; r < rows; r++)
for(c = 0; c < cols; c++){
pmat[ (r*cols) + c ] = (r*cols) + c;
}
}
//void show(int mat[][3], int rows, int cols){
void show(int *pmat, char rows, char cols){
char c, r;
printf("\n");
for(r = 0; r < rows; r++)
for(c = 0; c < cols; c++){
//printf("%d", pmat[r][c]); //falla
printf("%d ",*(pmat + r*cols + c));
printf("%d ", pmat[ (r*cols) + c ] );
}
}