C语言再学习——常量和变量
常量和变量
在计算机的内部,不能直接存储字符,所以计算机时以ascll码进行存储的。
ascll表总共有128个,需记住:其中A=65,a=97,字符0=48。
字符常量在内存中占用四个字节,但是字符变量在内存中占用一个字节。
证:
int main(int argc, const char * argv[])
{
char c = 'c';
printf("changliang = %lu\n",sizeof('a'));
printf("bianliang = %lu\n",sizeof(c));
return 0;
}
字符串常量占用的数比对应字符大一,例:“jjj”,占用了4个字节,由于在字符末尾有一个/0,是占用一个字节的。
在字符串打印时,只有碰到了/0时才会结束打印。
证:
int main(int args,const char * argv[])
{
printf("%s\n","qian\0fang");
return 0;
}
如上:在qian后面有\0,所以打印的时候只能打印到qian。
数据类型决定了开辟内存空间的大小。
C语言标识符:规定以下划线和字母开头,后面跟若字母或是下划线,数字。
变量的声明:通知编译器该变量已经被定义在其他地方了,申明的时候不能为变量赋值。
变量的定义:一定在内存中开辟了内存空间了。
运算符:
1.自增自减运算符
int main(int args,const char * argv[])
{
int i = 0;
int q = 0;
int j = i++;
int r = ++q;
printf("j=%d,r=%d,i=%d,q=%d",j,r,i,q);
//输出: 0,1,1,1
return 0;
}
解析:++在变量后面,先赋值,之后在自增,++在变量前面,先自增,之后赋值给变量。
逻辑关系之间的优先级关系:
单目运算符>算术运算符
逻辑与>逻辑或
初始化:在定义变量的同时给变量一个值(养成变量进行初始化的习惯)。
注意:在最后一个转义字符与双引号之间不能有任何空格。
C语言中的类型转换(位扩展),由低位向高位进行转换,例如从char类型向int类型转换(保证了数值大小的不变),而不能有高位向低位转换(可能改变)。
转换过程中,会发生位扩展,当正数时,在高位补零,当为负数时,高位补1,符号位为1,这样才能保证数值不变。
通过数据类型显示的转换,称为强制类型转换,例如:int i = (int)12.33333;
没有通过显示的转换,称为隐式的类型转换,例如:float f = 12.333+10;其中数值10位整形,在运算过程中就发生了隐的类型转换。
位截断:
当一个多字节类型的值赋值给低字节类型,就会发生位截断,例如:
float f1=20.5;
char ch = f1;
printf("ch = %d\n",ch);
如上:由于float位4byte,但是char为1byte,赋值时发生了位截断,并且保留低位,向高位截断。
类型转换的规律:
隐式类型转换:由低位向高位转换。
显示类型转换:既可以由低位向高位转换,也可以由高位向低位转换。
如下所示:
int main(int argc, const char * argv[]) {
//隐式转换和显示转换
//隐式转换
int i = 5;
float f = 5.33;
printf("float = %f\n",i+f);
//显示转换--由低位转高位
int j = 5;
double d = (double)j;
printf("double = %lf\n",d);
//显示转换--由高位转低位
double dou = 12.2342;
int in = (int)dou;
printf("in = %d\n",in);
return 0;
}
如非声明,这是原创 糊涂猫until