C语言字符串与指针报错咨询:无法将char[6]*转换为char*
分析
can't convert char[6] * to char *错误原因与解决方法 嘿,我刚看完你的代码和报错信息,这个问题其实是对数组名和指针的类型差异理解不到位导致的,咱们一步步拆解清楚:
报错的核心原因
先看你出问题的那行代码:ch3 = &ch1;
- 首先,
char ch1[]= "abcde";定义了一个长度为6的char数组(因为字符串字面量会自动在末尾加'\0',所以实际是{'a','b','c','d','e','\0'})。 &ch1取的是整个数组的地址,它的类型是char (*)[6]——也就是「指向长度为6的char数组的指针」。- 而你定义的
ch3是char *类型,也就是「指向单个char的指针」。
这俩指针的类型完全不兼容,编译器当然会报错说无法把char[6]*转换成char*。
很多初学者会误以为数组名就是指针,但其实数组名在大多数场景下会隐式转换成指向数组第一个元素的指针(也就是char*),但&数组名是另一种类型,千万别搞混。
解决方法
最简单也最规范的修正方式,就是直接把数组名赋值给ch3:
ch3 = ch1;
因为ch1作为数组名,会自动转换成指向它第一个元素('a')的char*指针,和ch3的类型完美匹配,这样*(ch3)就能正确输出'a'了。
如果非要用取地址的写法(不推荐,没必要),可以做强制类型转换,但这属于画蛇添足:
ch3 = (char*)&ch1;
虽然能编译通过,但可读性差,不如直接用数组名清晰。
额外的小提醒
顺便提一下代码里的其他细节:
- 标准C里不推荐用
void main(),应该写成int main(),最后加上return 0;。 clrscr()和getch()是DOS时代的函数(比如Turbo C里的),现代编译器(比如GCC、Clang)一般没有这些函数,可换成getchar()或者直接去掉。
修正后的完整代码大概是这样:
#include <stdio.h> int main() { int arr[]={1,2,3,4,5}; char ch[]= {'a','b','c','d','e',0}; char ch1[]= "abcde"; char *ch3="this a"; ch3 = ch1; printf("%c", *(ch3)); getchar(); // 替代getch(),等待用户输入 return 0; }
内容的提问来源于stack exchange,提问作者JohnD
相关产品推荐
相关产品推荐

