C语言关于编译器中提示的错误该如何理解?

第一个问题:这段代码编译器中提到的char*型是不是指get(m)的返回值为char*型?看网上说char*型与int型都占4个字节,是不是也可以将char*型看作是int型?第二个问题:编译器中提到的int型是不是指"abc"的类型为int型?怎么理解"abc"它的类型?第三个问题:编译器提到形参和实参1的类型不同,形参是char*型,实参1的返回值不也是char*型吗?怎么会类型不同?请就以上3个问题给出相应的解答,谢谢
#include <stdio.h>
int _strcmp(char *s1, char *s2) {
for (; *s1 && *s2 && *s1==*s2; ++s1,++s2) NULL;
return *s1==*s2 ? 0 : *s1>*s2 ? 1 : -1; }
main()
{
char m[5];
if (_strcmp(gets(m),"abc") == 0)
printf("a\n");
else
printf("b\n");
}

人家明明说的是参数1类型错误
gets返回值是int,"abc"的类型,应该是char const * const追问

gets的返回值不是char*型吗?为何是int型?
另外char const* const是什么类型,这和char*型有什么差别?

追答

就不是char *,没有为什么,请参见头文件的原型声明。
指向const char的const指针

追问

既然"abc"的类型为char const * const类型,为何编译器却显示为char *类型?
没有显示为char const * const类型?

追答

编译器说的是,你的函数的形参是char *类型。
后面的const你可以忽略,把一个const指针赋值给非const指针,是不会给出警告的。
前面的const依照编译器不同,有的会给出警告,有的不会。
给出警告是因为,"abc"是只读的字符串,向其写入会导致内存访问错误而崩溃。
严格的编译器,都会给出警告

追问

请看下我发给你的私信。

温馨提示:内容为网友见解,仅供参考
无其他回答
相似回答