C 将指针从指针数组复制到另一个变量时,直接赋值有效吗?

C 将指针从指针数组复制到另一个变量时,直接赋值有效吗?,c,pointers,memory-management,C,Pointers,Memory Management,我试图将指针数组复制到一个新变量。我不确定以下直接分配是否是执行复制的正确方式 SVECTOR **features = (SVECTOR **) malloc(n*sizeof(SVECTOR *)); for(i = 0; i < n; i++){ features[i] = getFeature(); } SVECTOR **new_features = features; // Doubt: 1 SVECTOR *feature = features[0]; // Doub

我试图将指针数组复制到一个新变量。我不确定以下直接分配是否是执行复制的正确方式

SVECTOR **features = (SVECTOR **) malloc(n*sizeof(SVECTOR *));
for(i = 0; i < n; i++){
    features[i] = getFeature();
}
SVECTOR **new_features = features; // Doubt: 1
SVECTOR *feature = features[0]; // Doubt: 2 
SVECTOR**features=(SVECTOR**)malloc(n*sizeof(SVECTOR*);
对于(i=0;i
尝试1为您提供了一个别名--功能和新功能引用同一数组。 尝试2为您提供第一个功能的别名

对于浅层副本,您需要的是

如果浅拷贝不足够,则需要进行深拷贝,这需要了解功能的结构:

SVECTOR **new_features = malloc(n * sizeof *features);
for(i = 0; i < n; i++){
    new_features[i] = cloneFeature(features[i]);
}
SVECTOR**new_features=malloc(n*sizeof*features);
对于(i=0;i
这是正确的,但请记住,新的功能和特性只是指针的副本,而不是这些指针指向的对象的副本。另外:它是别名指针:不同的指针可能指向相同的对象(并且对这些对象做了一些不好的事情)。您是否希望复制所有
n
指针,以便最终拥有
2*n
指针?或者您只是想通过第二个变量名访问
n
指针吗?@sarnold具体来说,我需要从一个变量(比如
pos\u features
)访问
n
指针的子集,从另一个变量(比如
neg\u features
)访问其余指针。此外,在复制到新变量后,希望获得免费的
功能。但是,如果需要从一个数组到第二个数组只浅拷贝一个指针子集。@ CordsEngEng[<代码> NexObjy[1] = [I] [i]代码/代码>,<代码> NexSyf[[ 1 ] =特征[j] < /代码>等。如果你的数组包含不同数量的特征,那么你应该考虑一个包含特征数量和指针的结构,例如,
typedef结构{unsigned n;SVECTOR**features;}FeatureArray(尽管名称SVECTOR似乎不适合某个功能)。
SVECTOR **new_features = malloc(n * sizeof *features);
for(i = 0; i < n; i++){
    new_features[i] = cloneFeature(features[i]);
}