数组&指针

数组和指针
编写程序计算两个矩阵的相乘:

注意:

  • 数组作为函数的参数怎么传递的
  • 二维数组怎么用指针表示
// matrix_multiply.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include <stdio.h>
#include <stdlib.h>
void matrix_multiply(int *m1,int *m2,int*r,int x,int y,int z);
int _tmain(int argc, _TCHAR* argv[])
{
 int A[][2] = {
  {2,-6},
  {3,5},
  {1,-1}
 };
 int B[][4] = {
  {4,-2,-4,-5},
  {-7,-3,6,7},
 };
 int x,y,z;
 x = 3;
 y = 2;
 z = 4;
 int *result = (int*)malloc(x*y*sizeof(int));
 matrix_multiply(A[0],B[0],result,3,2,4);
 //打印结果
 for (int m=0;m<x;m++)
 {
  for (int n=0;n<z;n++)
  {
   printf("%d\t",*(result+n));
   if (n == z-1)
   {
    result = result + z;
   }
  }
  printf("\n");
 }
 free(result);
 return 0;
}
/**
 ** int array[][]
 ** int *p = array[0];//p 是二维数组首地址
 ** m1 是二维数组的首地址
 ** m1+1 表示二维数组中第一个数后面的数(相同行)
 ** 若此行没有数字了,那指向下一行数字
 ** 指针p将二维数组转化为排列在一行的数字
 */
void matrix_multiply(int *m1,int *m2,int*r,int x,int y,int z)
{
 int i,j,k;
 i = 0;
 j = 0;
 k = 0;
 register int* p_m1 = m1;
 register int* p_m2 = m2;
 register int* p_r = r;
 int sum;
 for (;i<x;i++)
 {
  for (k=0;k<z;k++)
  {
   sum = 0;
   for (j=0;j<y;j++)
   {
    int num1 = *(p_m1+j);
    int num2 = *(p_m2+j*z+k);
    sum = sum + num1 * num2;
    if (j == y-1)
    {
     //p_m2 = p_m2 + z;
     //相当于一行和一列相乘得到一个结果
     *p_r = sum;
     p_r = p_r+1;
    }
   }
  }
  p_m1 = p_m1 + y;
 }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值