int类型为4字节,char为1字节,那么
int x=97; //存储0x0061 对吧
printf("%c",x); //答案为a,不知道是怎么实现的
以下是我一个测试:
int a[2]=(1,1);
scanf("%s", a);
printf("%d %d\n", a[0], a[1]);
输入&输出:
a&97 1
abc&6513249 1
abcd&1684234849 0
(最后这个0如果是被\0取代,应该只有1byte啊)
不太懂,求教!
a[2]={1,1} ==> 此时0x00 00 00 01 00 00 00 01(8个字节)对吗
任何长度为3以内的,a[1]的结果都是1。我理解是:
char是一个字节,所以当我按照string输入abd时,刚好(包括'\0')把第一个int占住了,当输入abcd以上的就把a[1]影响了。但具体怎么影响不知道
我是想从字节存储的角度来理解一下的。97存储时不应该是0x00 00 00 61吗?
尤其下面我自己测试的时候那些值得来源完全不清楚
这是16进制的,97是10进制。电脑存储都是16进制。
具体存储是怎么实现的呢,你看我的测试
int a[2]=(1,1);
scanf("%s", a);
printf("%d %d\n", a[0], a[1]);
这些结果不太明白是怎么来的
你的测试是
a[2]={1,1}
数组初始为1,1两个数字,但是你按照字符串方式修改了数组内容,这样
如果正好是一位字符的话,输入a,得到a[0]=97,a[1]=1
如果是abc、abcd等,会导致数组溢出,a[0],a[1]就不确定了,在内存里瞎胡跑了
任何长度为3以内的,a[1]的结果都是1。我理解是:
char是一个字节,所以当我按照string输入abd时,刚好(包括'\0')把第一个int占住了,当输入abcd以上的就把a[1]影响了。但具体怎么影响不知道
只要指针指向的内存不溢出,不会影响到后面的数值。
至于准确的表达,要看物理存储的格式,字符是以十六进制数存在内存里,从a[0]到a[1]有一定的距离,需要研究更深层次的C内存与数组的物理存储关系。
你的想法具有一定道理。