char s[1]与char s的区别
我定义了一个字符变量:char gender;
随后通过scanf对其进行赋值,再与另一字符作比较:
if(gender=='M')
但是这时候程序报错,说 ISO C++ forbids comparison between pointer and integer [-fpermissive] ,[错误] ISO C++禁止指针与整数的比较。
但是如果我修改变量的定义,改为:
char gender;
这时候编译通过了,这是为什么呢? 本帖最后由 qwer_1234 于 2020-4-13 21:03 编辑
看看 带上中括号就是数组,也就是指针了,不带就是一个普通的char变量 char gender;是字符数组char gender;是字符 qwer_1234 发表于 2020-4-13 20:16
你的文件要改成.c
能不能不要胡说八道 永恒的蓝色梦想 发表于 2020-4-13 20:18
是字符数组是字符
你这是废话? 本帖最后由 yexing 于 2020-4-13 20:41 编辑
在C语言中,所有的数组名都是一个指向该数组第0个元素的指针(如果还没学习,以后就会了解的)
你拿一个指针和一个字符比,它们是两个完全不同类型的变量,当然无法比较。
char str; //是一个字符变量
char str; //是一个长度为10的字符数组变量
如果要修改一个可比较的代码的话,应该是这样:
*涉及指针知识,如果看不懂请跳过,以后学指针就懂了,这里只是给你提供一个可行的方案
*不建议像下面那样做,这里只是按你的思路写一个可行的方案,因为字符数组一般有个表示字符串结尾的'\0'字符,但是这里并没有添加'\0'字符,会引发越界问题
#include <stdio.h>
int main(void)
{
char gender;
scanf("%c", &gender); //因为gender指向第0个元素,所以直接取址没问题
if (*gender == 'M') //'*'是取值符,即取gender指向的内存地址中存放的值
{
printf("相同!\n");
}
else
{
printf("不同!\n");
}
return 0;
} qwer_1234 发表于 2020-4-13 20:24
你这是废话?
那也比你的无稽之谈强 yexing 发表于 2020-4-13 20:26
在C语言中,所有的数组名都是一个指向该数组第1个元素的指针(如果还没学习,以后就会了解的)
你拿一个指 ...
纠正一下,是第 0 个元素
^_^
人造人 发表于 2020-4-13 20:33
纠正一下,是第 0 个元素
^_^
说成第1个元素比较容易理解^_^
不过严谨一点还是第0个元素 #7 楼给出了定义
只需要解引用就好了!
#include <stdio.h>
int main(void)
{
char gender="M";
if (*gender == 'M') printf("Equal!");
if (gender == 'M') printf("Equal!");
return 0;
} 永恒的蓝色梦想 发表于 2020-4-13 20:28
那也比你的无稽之谈强
五十步笑百步呢?我也有点文化的 qwer_1234 发表于 2020-4-13 20:55
五十步笑百步呢?我也有点文化的
应该是五百步笑十步吧。 如果我定义的是char s
如果不用指针的话,用 char来进行比较好像也可以, 何必呢?大家都是爱好这个呢! yexing 发表于 2020-4-13 20:26
在C语言中,所有的数组名都是一个指向该数组第0个元素的指针(如果还没学习,以后就会了解的)
你拿一个指 ...
如果我定义的是char s
如果不用指针的话,用 char来进行比较好像也可以 茶叶仓鼠 发表于 2020-4-13 21:10
如果我定义的是char s
如果不用指针的话,用 char来进行比较好像也可以
是的,这样子也没错
页:
[1]