二维数组的使用(new,delete,初始化,输出)

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/gongpan2468/article/details/74365878

今天去面试的面试题:

打印:

*

***

*****

*******

*********

***********

...

函数是:void printf_A(int n)

我面试的时候写的是:

扫描二维码关注公众号,回复: 7661916 查看本文章


void printf_A(int n)
{
 for (int i = 0; i < n; i++)
 {
  for (int j = 0; j < n - i - 1; j++)
   cout << " ";
  for (int k = 1; k <= 2 * i + 1; k++)
   cout << "*";
  cout << endl;
 }
}

这样确实没有错,但是当时想的是用二维数组写,和打印杨辉三角一样打印,后来实在不记得了,时间有限,也没多想,但是回来这样写,用了二维数组:


void printf_t(int n)
{ //new一个二维数组
 char **a;
 a = new char*[n];            //n个char*
 int line = 2 * (n - 1) + 1;   //列数
 for (int i = 0; i < n; i++)
 {
  a[i] = new char[line];     //每个char*指向line个元素的数组头地址
 }
 //为二维数组赋值,使得二维数组里的值全都为' ',为需要的元素赋值为‘*’;
 for (int i = 0; i < n; i++)
 {
  int offset = n - i - 1;//n-i-1个偏移量;
  for (int k = 0; k < line; k++)
   a[i][k] = ' ';
  for (int j = 0; j < 2 * i + 1; j++)  //第i行一共有2*i+1个‘*’;
   a[i][offset + j]='*'; //从偏移量开始赋值 
  }
 for (int i = 0; i < n; i++)
 {
  for (int j = 0; j < (2 * (n - 1) + 1); j++)
   cout << a[i][j];
  cout << endl;
 }
 for(int i=0;i<n;i++)
  delete[] a[i];
 delete[] a;
}

有什么不同呢?实际用途呢?

猜你喜欢

转载自blog.csdn.net/gongpan2468/article/details/74365878