c语言字符相关学习记录

char与char*一二事

字符
printf函数中%s对应着char*变量。
char变量占1字节内存空间。
char与int区别在于int占4字节,如果int变量地址的低8位数值与char相等,通过%.1s读取int变量内存时,结果与直接读取char是一样的。
我们眼中所有的变量,都是对应地址上按变量申明时申请的内存空间中的数据,所以操作字符值时,眼中不能只有‘A’或’a’,而应该是0x41,0x61。换算成二进制就是0100 0001与0110 0001。’a’与’A’的差值是0010 0000,用or运算就是or 0100 0001 ,0010 0000
所以就衍生出了很多另类但可行的计算方式,比如将’a’转化为’A’,可用以下方式
void main() {
    int z;
    int a;
    z = 0x00000061;
    a = 'A' - 'a';
    z = z + a;
    printf("z=%.1s\n", &z);
}

可以看到,为了证明int变量与char在特定的限制下,输出是一样的,直接将z声明为int,但%s中添加了’.1’来限定只取一个字节数据,而int对应内存的低8位一定与用char声明的值是相等的。

直接用char*申明变量也可行,但需要注意在声明后要初始化其值,否则 *z=1 这样的操作会因为指针z并未指向为char变量分配的地址,而无法接受数值。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值