二维数组中的指针加法计算 与 初始化

二维数组中的指针加法计算

#include "stdafx.h"

int _tmain(int argc, _TCHAR* argv[])
{
	int a[3][4] = { {}, {1,2,3,4} }; //int[4] a[3]   T[3] a

	//整体上来说
	printf("sizeof(a)=%d  sizeof(int[3][4])=%d\n",
		sizeof(a),sizeof(int[3][4]));      //3X4X4=48
	 

	//int[4] a[3] 元素访问
	printf("sizeof(a[0])=%d sizeof(int[4])=%d\n",
		sizeof(a[0]), sizeof(int[4]));

	printf("==============================================\n");
	
#if 0

	int[3][4]

	1.首先 没加1的时候 他们的地址都是相同的,因为存放的物理结构是线性的

	2.但是 他们代表的层次是不一样的 二维数组的名字a代表层次是行 也是首元素的首地址
	因为是二维数组 所以这里的首元素是第一行整体 

	3.加& 理解为升* 二维数组的元素是一维数组 a[0]代表的层次就是一维数组 
	进行升*后 &a[0]就达到了二维数组的层次
 
#endif

	printf("a=%p\n", a);
	printf("&a=%p\n", &a);
	printf("&a[0]=%p\n", &a[0]);
	printf("a[0]=%p\n", a[0]);
	printf("&a[0][0]=%p\n", &a[0][0]);

	printf("---------------------------------------------\n");

	printf("a+1=%p\n", a + 1); //a为二维数组的行的层次 对它+1后加的是 一行的大小为16

	printf("&a+1=%p\n", &a + 1);//对a升*后 变成整个二维数组的层次 +1 加的是整个二维数组大小 为48

	printf("&a[0]+1=%p\n", &a[0]+1);//对a[0]升* 后变成二维数组的行的层次(与a相同) 所以+1的大小为16 

	printf("a[0]+1=%p\n", a[0] + 1);//a[0] 为一维数组的层次 +1 加的一维数组之间的大小 为4

	printf("==============================================\n");

	printf("a[1]=%p\n",a[1]); //二维数组第二行的地址 可以由 a+1 或 &a[0]+1 得到
	printf("a[1]+1=%p\n", a[1] + 1); //这个加1加的是4 为a[1]数组的步长 所以为4

	return 0;
}





二维数组的初始化

#include "stdafx.h"

int _tmain(int argc, _TCHAR* argv[])
{
	//行缺省初始化
	int b[3][4] = { {1}, {2,2}, {3} };

	//全局缺省初始化(统一先排第一行)

	int c[3][4] = {1,2,2,3};

	//全部初始化
	int a[3][4] = { {1,1,1,1}, {2,2,2,2}, {3,3,3,3} };
	for (int i = 0; i < 3; i++)
	{
		for (int j = 0; j < 4; j++)
		{
			printf("%d\t", a[i][j]);
		}
		putchar(10);
	}
	printf("----------------------\n");



	//二维数组行可以省略 而列不能省略
	int d[][4] = { 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4 };

	for (int i = 0; i < sizeof(d) / sizeof(d[0]); i++)  //利用sizeof求行数 size(d[0])可以想为int[4]
	{                                                   //相当于用二维数组总长度 除以 一行的长度大小
		for (int j = 0; j < 4; j++)
		{
			printf("%d\t",d[i][j]); //\t表示俩数之间空一大格子
		}
		putchar(10); //换到下一行  printf("\n");
	}

	return 0;
}





  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,让我们来一步步解决这个问题。 首先,我们需要定义一个名为`Matrix`的类来表示二维数组。我们需要在类定义一个二维数组指针,并且需要定义一个构造函数来初始化这个数组。这里我们假设二维数组的大小为2×2。 ```cpp class Matrix { private: int **data; public: Matrix() { data = new int*[2]; for (int i = 0; i < 2; i++) data[i] = new int[2]; data[0][0] = 1; data[0][1] = 2; data[1][0] = 3; data[1][1] = 4; } // 析构函数,用于释放内存 ~Matrix() { for (int i = 0; i < 2; i++) delete[] data[i]; delete[] data; } }; ``` 接下来,我们需要在类重载运算符`+`和`-`,以便实现矩阵的加法和减法。为了方便起见,我们将运算符重载函数声明为类的成员函数。 ```cpp class Matrix { private: int **data; public: Matrix() { data = new int*[2]; for (int i = 0; i < 2; i++) data[i] = new int[2]; data[0][0] = 1; data[0][1] = 2; data[1][0] = 3; data[1][1] = 4; } ~Matrix() { for (int i = 0; i < 2; i++) delete[] data[i]; delete[] data; } Matrix operator+(const Matrix& m) const { Matrix result; for (int i = 0; i < 2; i++) for (int j = 0; j < 2; j++) result.data[i][j] = data[i][j] + m.data[i][j]; return result; } Matrix operator-(const Matrix& m) const { Matrix result; for (int i = 0; i < 2; i++) for (int j = 0; j < 2; j++) result.data[i][j] = data[i][j] - m.data[i][j]; return result; } }; ``` 最后,我们需要在主函数使用这个类来完成二维数组的输入和输出,以及加法和减法运算。 ```cpp int main() { Matrix m1; Matrix m2; std::cout << "请输入第二个二维数组的值:" << std::endl; for (int i = 0; i < 2; i++) for (int j = 0; j < 2; j++) std::cin >> m2.data[i][j]; Matrix m3 = m1 + m2; Matrix m4 = m1 - m2; std::cout << "矩阵相加的结果:" << std::endl; for (int i = 0; i < 2; i++) { for (int j = 0; j < 2; j++) std::cout << m3.data[i][j] << " "; std::cout << std::endl; } std::cout << "矩阵相减的结果:" << std::endl; for (int i = 0; i < 2; i++) { for (int j = 0; j < 2; j++) std::cout << m4.data[i][j] << " "; std::cout << std::endl; } return 0; } ``` 这样,我们就完成了题目所要求的内容:用成员函数重载运算符“+”“-将两个二维数组相加和相减,其第一个二维数组的值由构造函数设置,另一个二维数组的值由键盘输入。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值