【C语言】变量及强制类型转换

一、变量

1.1 变量的概念

变量是一个有名字的,具有具体属性的一个存储单元,可以将变量直接就理解为内存。

在整个程序运行的过程中,值允许发生变化的量,变量一般使用来保存数据的。

1.2 定义变量的格式

储存类型+数据类型+变量名;

例:auto int a;
    float b;
    double c;

储存类型本文暂不说明,后续单独写,局部变量不写存储类型默认都是 auto类型。

变量名是一个标识符,要符合命名规范。

命名规范:①由数字、字母、下划线组成

②不能以数字开头

③不能和关键字冲突

1.3 变量的赋值和初始化

#include <stdio.h>

int main(int argc, const char *argv[])
{
	//在定义变量的同时赋一个初值就是给变量进行初始化
	int a = 5;
	printf("a = %d
", a);//读取变量的值  

	a = 10;//使用常量10给变量a赋值
	printf("a = %d
", a);//10

	int b = a;//用a的值给变量b初始化
	printf("b = %d
", b);//10

	//也可以使用表达式的结果给变量赋值
	b = a*10;
	printf("b = %d
", b);//100

	//变量之间可以参与运算
	int c = b - a;
	printf("c = %d
", c);//90

	//如果定义变量没有初始化,变量里存储的是随机值!
	int d;
	printf("d = %d
", d);//随机值

	return 0;
}

1.4 注意事项

1、在同一作用域内,不允许定义重名变量。

include <stdio.h>

int main()
{
    int a = 10;
    int a = 20; //错误的,编译器会报错

    return 0;
}

2、一行可以定义多个变量,中间用逗号分隔 。

include <stdio.h>

int main()
{
    int a , b = 10 , c;
    printf("a = %d,b = %d, c = %d
",a,b,c);//a 和 c 未进行初始化,打印为随机值,b = 10  
    return 0;
}

3、变量如果没有定义,是不能直接使用的。

include <stdio.h>

int main()
{
    a = 100;
    printf("a = %d",a);//编译器会报错 
    return 0;
}

二、强制类型转换

2.1概念

所谓的强制类型转换(强转),就是在某次运算中通过某种方式将变量的类型转换成新的类型来参与本次运算。变量自身的类型不会发生改变,分为显式强转和隐式强转。

2.2 显示强转

格式:(类型名)变量名;

#include <stdio.h>

int main(int argc, const char *argv[])
{
	int a = 5;
	int b = 2;
	int c = a / b;//因为 a  b  c 均为整型,所以结果为整型
	printf("c = %d
", c);  // 2

	float d = a / b;
	printf("d = %f
", d); // 2.000000

	float e = (float)a / (float)b;//将 a  b 强转为浮点型参与本次运算
	printf("e = %f
", e);//2.500000

	//而a和b本身的类型没有变
	printf("%d %d
", a, b);

	return 0;
}

2.3 隐式强转

隐式强转是由编译器根据上下文自动推导而来的,如果编译器认为是安全的,则允许使用;如果编译器认为是不安全的,会报一个警告。

#include <stdio.h>

int main(int argc, const char *argv[])
{
	float a = 3.14;
	int b = a;//隐式强转,相当于取整的操作
	printf("b = %d  a = %f
", b, a);//3 3.14

	return 0;
}

2.4 注意事项

1、强制类型转换是不安全的,在使用过程中要谨慎。

例:小类型转大类型一般没有问题,但是大类型转换为小类型时容易发生越界。

#include <stdio.h>

int main(int argc, const char *argv[])
{
	char m = 100;
	int n = (int)m;
	printf("m = %d, n = %d
", m, n);//100 100

	
	int m = 300;
	char n = (char)m;
	printf("m = %d, n = %d
", m, n);//300 44 因为有符号的char类型可以保存的最大值为127
                                     // 数据被截断了

	return 0;
}

2、有符号数和无符号数参与运算时,会将有符号数强转成无符号数参与运算,结果也是一个无符号数。

#include <stdio.h>

int main(int argc, const char *argv[])
{
	signed int a = -20;
	unsigned int b = 10;
	if( a+b > 0 ){
		printf("yes
");//执行程序会输出 yes
	}else{
		printf("no
");
	}

	return 0;
}
经验分享 程序员 微信小程序 职场和发展