Cat*_*ita 7 c arrays pointers memcpy dynamic-memory-allocation
要清楚,我的代码完美无缺.我担心的问题是我不确定我的数组分配类型.
我的任务很简单:我需要在动态分配的数组中执行一些操作.
然而,值已经在数组中给出.所以我需要在其中添加这些值.
为了保持我的矢量动态分配并避免以下情况:
float *p;
p = malloc(9 * sizeof(float));
* p=2;
* (p+1)=60;
* (p+2)=-23;
.
.
.
* (p+8)=9;
Run Code Online (Sandbox Code Playgroud)
我试过这样做:
float *p;
p = malloc(9 * sizeof(float));
memcpy (p, (float[]) {2 ,60 ,-23, 55, 7, 9, -2.55, -66.9, 9}, 9 * sizeof(float));
Run Code Online (Sandbox Code Playgroud)
现在我不确定因为memcpy将一个静态分配的数组复制到我的p
.我的问题是:我的阵列仍然是动态分配的?
编辑:我的问题是指第二个代码.
我的数组仍然保持动态分配?
float *p;
p = malloc(9 * sizeof(float));
memcpy ( p, (float[]){2,60,-23,55,7,9,-2.55,-66.9,9}, 9 * sizeof(float));
Run Code Online (Sandbox Code Playgroud)
是.指针的值p
保持不变.它仍然指向动态分配的内存.
p[0]
中,第一元件现在具有的值2.0f
,
p[1]
,下一个元件现在具有的值60.0f
等
一些编码建议:
int main(void) {
#define COUNT 9
float *p = malloc(sizeof *p * COUNT);
if (p) {
memcpy(p, (float[COUNT] ) { 2, 60, -23, 55, 7, 9, -2.55f, -66.9f, 9 },
sizeof *p * COUNT);
//...
}
free(p);
return 0;
}
Run Code Online (Sandbox Code Playgroud)