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;
}
- C/C++的二重指针
- C语言 int** 二重指针的理解
- C语言之二重指针
- C语言中二重指针和指针数组以及数组指针的测试
- C/C++ 高质量编程--内存,二重指针,指针的高级使用解析 3
- C语言---从指针到二重指针(上)
- 关于二重指针的问题
- 二重指针的一个问题
- C语言 内存二重释放
- 内存。二重指针,指针的高级使用
- 二重指针、指针引用的效果分析
- 二重指针
- 二重指针
- 二重指针
- 二重指针
- 链表使用二重指针来传参,无返回值-C语言
- C语言学习知识点(六)——二重指针概念及其应用
- 二重指针的一个问题分析
- 单链表的遍历与长度计算
- 百度地图搜索、标注地图示例
- Node.js 实现简单的接口服务器
- cocos2D-x升级
- 从printXX看tty设备
- C/C++的二重指针
- VS2008下安装和使用BOOST库boost-1_54
- PHP扩展开发(2)-第一个扩展
- 关于协方差矩阵
- Android中Dialog去黑色边框
- 理解MySQL——索引与优化
- 比微软kinect更强的视频跟踪算法--TLD跟踪算法介绍
- 安装系统时出现“windows无法安装到这个磁盘。选中的的磁盘采用GPT分区形式”,该怎样解决呀?
- Ubuntu Virtualbox分配USB设备