bycj.net
当前位置:首页 >> C 内存分配(DouBlE *)mAlloC(n * sizEoF (DouBlE)) >>

C 内存分配(DouBlE *)mAlloC(n * sizEoF (DouBlE))

malloc的原型:void* malloc(unsigned int num_bytes);也就是说返回的是一个void指针,根据你的代码,你是申请了n个double元素的数组空间,那当然要使用(double*)把它转换成double指针了.

malloc() 函数的返回类型是 void *,代表任意类型的指针,在实际应用中需要把它转型为申请类型的指针,(doube *) 是强制转型运算符.具体实例:double *p = (double *)malloc(sizeof(double) * 5); // 分配 5 个 double 的存储空间malloc(n) 分配长度为n 字节的内存块,sizeof(double) 表示一个 double 占用的存储空间,sizeof(double) * 5 就表示 5 个 double 占用的存储空间.

用malloc申请一段连续的内存空间, 这段内存可以存放n个double类型的变量, 实际上就是动态申请了一个double[n]的数组因为malloc的返回类型都是(void *)所以强制转换为(double *), 需要留意的是无论指针类型是什么所有指针的size都是相同的P[i]等价于*(P + i), 甚至可以写成i[P]于是等价于*(i + P)虽然这样写是不推荐的P指向malloc申请的数组的第一个元素, *P是这第一个元素的值, P+1就是指向第二个元素, 以此类推

1. double是双精度浮点数,比float 能表示小数点儿后更多的位.2. 可以3. 语法上可以不一样,malloc的参数是分配置内存的大小,你写个240代替30*sizeof(double)也是可以的,但是不直观.返回值是void *, 前面的(double*)是强制类型转换,应该是要赋值给一个double*的变量.

sizeof(double)获取double类型所占的字节数,然后调用malloc函数给(n + 1)个double类型的数据分配内存,把地址转换成double*类型,赋值给xi,现在xi就指向该数组的首地址.(malloc和recalloc这两个函数式分配内存用的,一般和free成对使用)

释放内存就是free(p),貌似上面写错了吧 应该是: p = (double *)malloc(sizeof(double) *N)

我帮你化简一下你就全明白了.typedef double* fpointer;fpointer* p = 0;//p是fpointer类型的动态数组,有2个元素p = (fpointer*)malloc(2 * sizeof(fpointer));double a = 5.0;double b = 6.0;*p[0] = 3.14; //错误,p[0]没有分配内存,解引用失败p[0] = &a; //没问题p[1] = &b; //ok

应该 int n=10;在malloc前给n赋值 否则n是未知值 很危险的操作

分配一个双精度浮点数的空间(也就是4个字节),并返回指向存放这个浮点数的空间的指针.

T1是指针的指针, double ** 类型.分配 double ** 时,用 sizeof(double*); 带1个*分配 double * 数组 时,用 sizeof(double); 不带*----------------------------------

相关文档
xcxd.net | fpbl.net | zdhh.net | qyhf.net | yhkn.net | 网站首页 | 网站地图
All rights reserved Powered by www.bycj.net
copyright ©right 2010-2021。
内容来自网络,如有侵犯请联系客服。zhit325@qq.com