const指针成员 - 不可变项目列表

时间:2017-01-08 17:41:14

标签: c pointers const

以下是List表示,

typedef struct List{

  void **array;
  int lastItemPosition;
  int size;
}List;

其中list->array分配了const void *集合,以维护项目的不变性,

list->array = malloc(INITIAL_LIST_SIZE*sizeof(const void*));

但在const void *

中分配list->array
void arrayInsertItem(List *arrayList, const void *newItem){
  ...
   arrayList->array[++(arrayList->lastItemPosition)] = newItem;
  ...
}

给出错误:

 error: assignment discards ‘const’ qualifier from pointer target type [-Werror=discarded-qualifiers]
   arrayList->array[++(arrayList->lastItemPosition)] = newItem;

^

是否需要在const void **array中声明List以保持项目的不变性?

如何解决此问题?

2 个答案:

答案 0 :(得分:2)

  

为了维护,不变性,const void * type项存储在collection list->数组中。但是给出错误:

这就是你的追求,但你没有宣布这样的阵列:

  

void ** array;

尝试更改为:

  

const void ** array;

答案 1 :(得分:0)

  

其中list->数组使用const void * collection

进行分配

无论如何,这不会改变array的类型。

由于您已将void **array;定义为成员,array的类型指针指向void *array[i]的类型为void *

当您要分配const void *时,该元素也应具有相同的类型限定符

更改

 void **array;

 const void **array;