二级指针的传递和应用

#include <iostream>

using namespace std;

/*
最近在写一个程序的时候用到了二级指针作为函数参数的情况,就在函数内部如何操作二级指针为数组做以下探讨:

无非有两种使用方式 a[i][j] or *((type *)a + i*col + j);

先看下面的测试源码:
*/

void test(int col, double **a)
{
	int i, j;
	for (i = 0; i < col; i++)
	{
		for (j = 0; j < col; j++)
		{
			a[i][j] = 2.0;
		}
	}
}

void test_1(int col, double **a)
{
	int i, j;
	for (i = 0; i < col; i++)
	{
		for (j = 0; j < col; j++)
		{
			*((double *)a + i * col + j) = 2.0;
		}
	}
}

void main()
{
	int i, j, col;

	cout << "Please input a number must less than 5" << endl;
	cin >> col;
	double ** a;
	a = new double*[col];

	double a_1[5][5];

	for (i = 0; i < col; i++)
	{
		a[i] = new double[col];
	}
	for (i = 0; i < col; i++)
	{
		for (j = 0; j < col; j++)
		{
			a[i][j] = 1.0;
			a_1[i][j] = 10.0;
		}
	}

	//test(col, a);        // 1. pass

    //test(5,a_1);    // 2. error无法从double[5][5]转换为double**,因为不知道5  5大小

    //test_1(col,a);    // 3. error  第一行和第二行不是连续的

    //test_1(5,a_1);    // 4. error 无法从double[5][5]转换为double**,因为不知道5  5大小


	delete[] a[0];
	delete[] a[1];
	delete[] a;
	cout << "Done!" << endl;
}

  

posted @ 2020-04-05 23:32  cheshulin  阅读(193)  评论(0编辑  收藏  举报