8 IntelliSense: "char (*)[20]" 类型的实参与 "char **" 类型的形参不兼容
时间: 2024-09-11 11:16:04 浏览: 45
在C语言中,`char (*)[20]` 表示一个指向具有20个字符的数组的指针,这是一个指向一维字符数组的指针。而 `char **` 表示一个指向字符指针的指针,也就是一个指向字符串(以字符指针表示)的指针。
当函数的形参是 `char **` 类型时,它期望传入的是一个字符串的指针(即字符指针数组),每个字符串都是以 NULL 结尾的字符数组。当你尝试传入 `char (*)[20]` 类型的实参时,因为两者类型不匹配,所以编译器会报错。
这种类型不兼容的情况通常出现在字符串处理函数中,比如当我们想要传入一个二维字符数组(每个内部数组代表一个字符串)时,不应该使用 `char **` 类型的形参。
例如,下面的函数定义期望接收的是字符串的指针数组(字符串数组),而不是二维字符数组:
```c
void processStrings(char **strings);
```
如果你尝试以如下方式调用该函数:
```c
char array[10][20];
processStrings(array); // 错误:类型不匹配
```
编译器会报出错误,指出 "char (*)[20]" 类型的实参与 "char **" 类型的形参不兼容。
为了解决这个问题,可以使用数组到指针的隐式转换,但通常需要改变函数的参数类型,使其能够接受一个指向字符数组的指针,或者使用其他数据结构来适应函数的参数要求。
相关问题
IntelliSense: "char *" 类型的实参与 "LPCWSTR" 类型的形参不兼容
这个错误提示是由于你在调用函数时传入的参数类型与函数定义中参数类型不一致导致的。
"char*" 表示字符串指针,通常用于表示 ASCII 字符串。而 "LPCWSTR" 表示 Unicode 字符串。它们是不同的数据类型。
如果你想使用 Unicode 字符串作为参数,你需要将字符串使用 L 前缀来标识,例如 L"Hello World"。或者你也可以使用 MultiByteToWideChar 函数将 ASCII 字符串转换成 Unicode 字符串。
另外,如果函数定义中声明的参数类型是 "LPCWSTR",那么你必须在函数调用时传入一个 Unicode 字符串类型的参数。如果函数定义中声明的参数类型是 "char*",那么你必须传入一个 ASCII 字符串类型的参数。
2 IntelliSense: "void *" 类型的值不能用于初始化 "wchar_t *" 类型的实体 29 c:\users\王瑞琪\documents\visual studio 2010\projects\ai2\ai2\ai2.cpp 40 ai2
这个错误是由于将一个"void *"类型的值用于初始化"wchar_t *"类型的实体而导致的。"void *"是一个通用指针类型,可以指向任何类型的数据,而"wchar_t *"是一个宽字符字符串类型。由于类型不匹配,编译器会报错。
要解决这个问题,你可以考虑使用适当的类型转换来将"void *"类型的值转换为"wchar_t *"类型。具体的转换方式取决于你的代码逻辑和需求。
阅读全文