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变量分配的地址,而无法接受数值。