C/C++的二重指针

来源:互联网 发布:网上厨房软件 编辑:程序博客网 时间:2024/05/09 10:25

摘自程序员的二重指针》,

网址http://blog.163.com/light_warm/blog/static/31681042008522112538931/

今天,突发奇想地去用C/C++实现K-Means算法,逼于无奈,运用了二重指针。说到指针,其高效与灵活真的很好,但其安全性就让人担忧,草草写了个简单的程序:

#include <iostream>

#include "SimpleKMeans.h"

using namespace std;


int main()
{

int i;

double **a = new double*[2];

for (i = 0; i < 2; i++)

{

*(a + i) = new double[2]

}

a[0][0] = 8;

a[0][1] = 2;

a[1][0] = 3;

a[1][1] = 4;

double *p = TheMeanValues(a, 2, 2);

for (i = 0; i < 2; i ++)

{

    cout << *(p + i) << " ";

}


    cout << endl;
    delete[] p;
    for (i = 0; i < 2; i++)
   {
      delete[] *(a + i);
   }


   delete[] a;
   return 0;
}

该程序简单地列举了二重指针的分配和回收(C++描述),如果用C,则可以改成:

double **getmemory(int m,int n)
{

    int index;
    double **ptr=(double **) malloc(sizeof(double *) * m);
    for (index=0;index<m;index++)
    {
        ptr[index]=(double *) malloc(sizeof(double) * n);
    }
    return ptr;
}

其释放方法为:

void freemem(double ** ptr, int m, int n)

{

       int i;

       for (i = 0; i < m; i ++)

       {

            free(*(ptr + i));

       }

       free(ptr);

}

二重指针作形参:

double* TheMeanValues(double **table, int recNum, int dim)

 double temp = 0;
 double *res = new double[dim];
 int i, j;
 for (i = 0; i < dim; i ++)
 {
  temp = 0;
  for (j = 0; j < recNum; j ++)
  {
   temp += *(*(table + j) + i );
  }
  temp /= (double) recNum;
  *(res + i) = temp;
 }
 return res;
}

原创粉丝点击