“ElemType” (aka “char”) 类型的实参与 “ElemType *” (aka “char *”) 类型的形参不兼容 怎么改正
时间: 2024-09-14 13:09:17 浏览: 54
C语言通用数据类型链表的实现
"ElemType" (字符类型) 和 "ElemType *" (字符指针类型) 的不兼容在于,前者代表的是单个字符,后者则是指向字符的一组内存地址。在C/C++中,当你试图将一个字符数组(如 `a[]`)作为 `char *` 类型的参数传递时,实际上你在传递的是数组的首地址。
为了纠正这个不兼容,你可以选择以下方式之一:
1. 如果 `a[]` 是一个字符数组并且你确实想将整个数组作为字符串处理,你应该传递数组本身而不是其地址,就像这样:
```c
void SPCreateList(SqList * &L, const char a[], int n) {
// ...
}
```
这里的 `const` 表示 `a` 是只读的,不会修改它。
2. 如果你想逐个添加数组中的元素到 `SqList` 中,你应该遍历数组并将每个元素添加,不需要使用 `char *` 形参:
```c
void SPCreateList(SqList * &L, char a[], int n) {
int i;
L = (SqList *)malloc(sizeof(SqList));
L->length = 0;
for (i = 0; i < n; ++i) {
L->length++;
L->data[L->length - 1] = a[i]; // 注意这里是对数组元素的操作
}
// ...
}
```
在这两种情况下,`a[]` 都直接传递给函数,而无需转换成指针形式。
阅读全文