字符型变量C为啥直接可以和ASCII码比较呢?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了字符型变量C为啥直接可以和ASCII码比较呢?相关的知识,希望对你有一定的参考价值。

char c;
int i=0;
while((c=getchar())!=’\n’)
if(c>=65&&c<=90) i++;
printf("%d\n",i);
提问:我的问题是 定义字符型变量c,那么c直接可以和65以及90进行比较吗?此时的字母c代表什么呢?代表ASCII码吗?不代表输入的字符吗?

在C语言里,char类型的变量存储的就是ASCII码,所以可以直接与整型的数值进行比较。char类型的变量可以看成是一个数。追问

是不是任何一个出现在C语言中的标志 字母啊 数字啊 各种符号啊 他们对应的都有ASCII码 而只有当定义成char 时候 对应的ASCII码才会出现呢?如果没有定义char 那么ASCII码是用不上的吧?

追答

不是说代码中的标识符都对应ASCII码的……


你试一试下面这段代码看看能否加深理解

#include <stdio.h>
int main()
 
    int a = 65; 
    char b = 'B'; 
    printf("%d, %d\\n", a, b); 
    printf("%c, %c\\n", a, b); 
    return 0;

参考技术A 其实就像卖房子的中介一样。ASCII码只是起到了一个中间方的作用。

就像你写int a=65;也就相当于写char a='A';
这两句话是等价的。

65是int型的,对应的是ASCII码值里的65,也就是char里的A。
同样的也可以不仅仅是十进制的int型。

再来回答你上述的问题。
比如你输入的是67,也就可以转化成C,那么67和65或90比较又有什么不可以呢?
此时字母c代表的是ASCII码值为67,代表的是C。

再来看这个程序:
65到90是我们所熟知的大写英文字母。
而这里的 i 相当于是统计了大写字母的个数。
参考技术B 把char转换为int时,结果还是char的数值。
char占一个字节,int占四个字节,它们的取值范围不同,char的取值范围是0-255,在这个范围内char和int是可以通用的,char可以随时转换为int,而int如果值超出char的最大取值范围,在转成char时会报错。

c语言char和int可以互相赋值,但指针不能赋值,char *和int *不能直接赋值,为啥呢?谢谢

char 和 int 是通过ASCLL码相互赋值的 例如 a 以 %d 输出 则为97 以%c输出则为'a' char指针和int指针 之所以不能相互赋值是因为他们的长度不同 Tc 下 char 只有一个字节8个二进制位 而int 则是两个字节16个二进制位 由于指针所指向的是变量的起始地址 那么在当指针指向一段连续内存时 它找到每个变量是通过对起始地址运算得到的下一个元素的起始地址 然后根据长度 取出里面的内容 输出我们想要的格式 所以不同的类型长度不同 相互赋值 必定无法得到想要的结果 追问: char *a;int *b;a = b;这样编译不通过,a和b里都是地址,为什么不能赋值呢,而*a = *b可以 回答: a=b;这样的表达式是不对的,首先你的指针没有指向任何地址 *a=*b 是内容赋值 类型和ASCLL码之间转换是一样的 追问: char *a = NULL;int *b =NULL;a = b;这样也不对 回答: 指针相互赋值 必须类型相同 指针不能在没有指向时调用 给你打个比方吧 char *p 是认为在一段内存中8个二进制位是一个值 int *p 是认为在一段内存中16个二进制位是一个值 如果你把int 的指针地址给了char 结果char只取了8个二进制位 那么你说 这个值会和int取出来的一样吗?肯定是不一样的,所以不允许他们赋值,因为长度不同,如果类型相同,长度也就相同,赋值是没问题的 追问: 是不对,但编译不通过,long a;char b;b =a;这样长度也不同,但编译能通过,有警告conversion from 'long' to 'char', possible loss of datalong a;char b;b =a;编译不通过,有错误annot convert from 'long *' to 'char *'是不是指针特别,谢谢 回答: 这是赋值这种情况会有溢出的情况char 的范围 在无符号的情况下 是1-255 long 已经超出了这个范围 所以会有溢出 追问: 谢谢,还是有些迷糊,指针之间也是赋值,编译为啥错误呢,直接就编译不通过, 回答: 建议你先看一下基础知识 一般的C语言入门书 都会有 现在你知道他们的规则就足够了 如果需要知道的更多 你还需要去了解汇编之类的知识 提问者 的感言: 很好2012-06-03 参考技术A 因为char是1字节,而int一般是2或4字节,
char与int只在-128到+127之间时才等价,而int一般是+-3万左右,所以指针是不能等价的.

以上是关于字符型变量C为啥直接可以和ASCII码比较呢?的主要内容,如果未能解决你的问题,请参考以下文章

为啥C语言编程时输入数字转化为了ASC码

c语言编程中如何显示字符的ASCII码值?

C语言,ASCII码怎么转换为字符?

C语言ASCII码与字母如何转换?求详解

c语言怎么求字符的ascii码

c语言ASCII码排序