茶叶仓鼠 发表于 2020-4-13 20:15:26

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 20:16:50

本帖最后由 qwer_1234 于 2020-4-13 21:03 编辑

看看

BngThea 发表于 2020-4-13 20:17:28

带上中括号就是数组,也就是指针了,不带就是一个普通的char变量

永恒的蓝色梦想 发表于 2020-4-13 20:18:11

char gender;是字符数组char gender;是字符

永恒的蓝色梦想 发表于 2020-4-13 20:18:48

qwer_1234 发表于 2020-4-13 20:16
你的文件要改成.c

能不能不要胡说八道

qwer_1234 发表于 2020-4-13 20:24:14

永恒的蓝色梦想 发表于 2020-4-13 20:18
是字符数组是字符

你这是废话?

yexing 发表于 2020-4-13 20:26:28

本帖最后由 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;
}

永恒的蓝色梦想 发表于 2020-4-13 20:28:14

qwer_1234 发表于 2020-4-13 20:24
你这是废话?

那也比你的无稽之谈强

人造人 发表于 2020-4-13 20:33:39

yexing 发表于 2020-4-13 20:26
在C语言中,所有的数组名都是一个指向该数组第1个元素的指针(如果还没学习,以后就会了解的)
你拿一个指 ...

纠正一下,是第 0 个元素
^_^

yexing 发表于 2020-4-13 20:35:44

人造人 发表于 2020-4-13 20:33
纠正一下,是第 0 个元素
^_^

说成第1个元素比较容易理解^_^
不过严谨一点还是第0个元素

Cool_Breeze 发表于 2020-4-13 20:48:55

#7 楼给出了定义
只需要解引用就好了!
#include <stdio.h>
int main(void)
{
        char gender="M";
        if (*gender == 'M') printf("Equal!");
        if (gender == 'M') printf("Equal!");
        return 0;
}

qwer_1234 发表于 2020-4-13 20:55:45

永恒的蓝色梦想 发表于 2020-4-13 20:28
那也比你的无稽之谈强

五十步笑百步呢?我也有点文化的

永恒的蓝色梦想 发表于 2020-4-13 21:03:00

qwer_1234 发表于 2020-4-13 20:55
五十步笑百步呢?我也有点文化的

应该是五百步笑十步吧。

茶叶仓鼠 发表于 2020-4-13 21:04:11

如果我定义的是char s
如果不用指针的话,用 char来进行比较好像也可以,

Cool_Breeze 发表于 2020-4-13 21:05:12

何必呢?大家都是爱好这个呢!

茶叶仓鼠 发表于 2020-4-13 21:10:47

yexing 发表于 2020-4-13 20:26
在C语言中,所有的数组名都是一个指向该数组第0个元素的指针(如果还没学习,以后就会了解的)
你拿一个指 ...

如果我定义的是char s
如果不用指针的话,用 char来进行比较好像也可以

yexing 发表于 2020-4-13 21:25:20

茶叶仓鼠 发表于 2020-4-13 21:10
如果我定义的是char s
如果不用指针的话,用 char来进行比较好像也可以

是的,这样子也没错
页: [1]
查看完整版本: char s[1]与char s的区别