您的位置:首页 > 其它

数组&指针

2018-02-02 09:52 190 查看
数组和指针

编写程序计算两个矩阵的相乘:

注意:

数组作为函数的参数怎么传递的

二维数组怎么用指针表示

// 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;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: