在VC下,sizeof (int)=4,sizeof(char)=1的,在声明变量时,是按在内存中从高地址分配,递减变量所占的字节数,输出的地址为其起始地址,既递减所得地址。数组从下标高的在内存中地址也是高的,char型理应站1个字节,可是不知道怎么的,系统分配的却是4个字节。查看变量内存地址可以用 printf("%x",&变量名);
下面的代码是在VC6.0上编译的,应该是编译器的原因,我在DEV CPP上编译char就是占一个字节。
#include<stdio.h>
int main()
{
int i,a[10];
char c,d;
printf("%x/n",&i);
printf("%x/n",&a);
printf("%x/n",&a[0]);
printf("%x/n",&a[9]);
printf("%x/n",&a[10]);
printf("%x/n",&c);
printf("%x/n",&d);
return 0;
}
结果是:
12ff44
12ff1c
12ff1c
12ff40
12ff44
12ff18
12ff14
Press any key to continue
对于char型和int型变量赋值,char截取int的低字节。并且char输出为有符号数。
#include<stdio.h>
int main()
{
int i,j,a[100];
char c;
c=i=258; //100000010B
printf("%d/n",c);//char型截取低字节--00000010B
printf("%d/n",i);//int为000000000,00000000,0000001,00000010B
j=0;
while(i!=0)
{
a[j++]=i%2;
i=i/2;
}
for(i=j-1;i>=0;--i)//输出i的二进制
printf("%d",a[i]);
printf("/n");
return 0;
}
char型用%u输出的结果怎么那么出乎我意料呢。。。