伪数组代码&&矩阵相乘

来源:互联网 发布:c语言逻辑运算符号 编辑:程序博客网 时间:2024/06/06 01:54
#include <stdio.h>#include <stdarg.h>#defineregregisterint array_offset( int arrayinfo[], ... );int main(){int a[7] = { 3, 0, 3, 1,4, 2,6};printf( "%d \n ", array_offset( a, 2, 3, 4 ) );return 0;}intarray_offset( int arrayinfo[], ... ){regintndim;regintoffset;regintlo, hi;reginti;ints[ 10 ];    va_listsubscripts;ndim = *arrayinfo++;if( ndim >= 1 && ndim <= 10 ){va_start( subscripts, arrayinfo );for( i = 0; i < ndim; i++ ){s[i] = va_arg( subscripts, int );}va_end( subscripts );        offset = 0;for( i = 0; i < ndim; i++ ){lo = *arrayinfo++;hi = *arrayinfo++;if( s[i] < lo || s[i] > hi ){return -1;}offset *= hi - lo + 1;offset += s[i] - lo;}return offset;}return -1;}

#include <stdio.h>void matrix_multiply(int x, int y, int z, int (*m1)[y], int (*m2)[z], int (*r)[z] );int main() {int a[2][2] = { 1, 1, 1, 1 };int b[2][1] = { 1, 1 }; int r[2][1]={0, 0};    matrix_multiply( 2, 2, 1, a, b, r);int i = 0;for( i = 0; i < 2; i++)printf( "%d \n", r[i][0] );printf("\n");return 0;}void matrix_multiply(int x, int y, int z, int (*m1)[y], int (*m2)[z], int (*r)[z] ){int i = 0;int j = 0;int k = 0;for( i = 0; i < x; i++ )for( j = 0; j < z; j++ ){k = 0;                 // 原来忘初始化k,出现了计算错误。谨记while( k < y ){*( *(r+i) + j ) += (*( *(m1+i) + k )) * ( *( *(m2+k) + j ));    k++;}}}

原创粉丝点击