伪数组代码&&矩阵相乘

#include <stdio.h>
#include <stdarg.h>

#define		reg		register

int 
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;
}

int
array_offset( int arrayinfo[], ... )
{
	reg		int		ndim;
	reg		int		offset;
	reg		int		lo, hi;
	reg		int		i;
	int		s[ 10 ];
    va_list	subscripts;

	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++;
			}
		}
}
	

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值