C语言由基础至精通——数据类型与变量

在计算机科学和计算机编程中,数据类型是数据的一个属性,编译器只有知道了数据的类型,才知道怎么操作数据。C语⾔提供了丰富的数据类型来描述⽣活中的各种数据。例如,使⽤整型类型来描述整数,使⽤字符类型来描述字符,使⽤浮点型类型来描述⼩数。

一、基本数据类型与复合数据类型

基本数据类型是指最基本的数据类型,包括整型浮点型字符型布尔型等。而复合数据类型则是由多个基本数据类型组成的数据类型,包括数组、结构体、枚举等。

数据类型
这里主要介绍基本数据类型。

  • 字符:字符型数据是用单引号括起来的单个字符,如’a’、‘b’、‘=’、‘+’、'?'都是合法字符型数据。在这里单引号只起定界的作用,并不代表字符。定义方法:char------字符类型
  • 整型:整型数据即整数,包括正整数、负整数和零。定义方法:int------整型,short[int]------短整型,long[int]------长整型,long long[int]------长长整型
  • 浮点型:带小数点的数,即小数点可以浮动。定义方法:float------单精度浮点型,double------双精度浮点型,long double------更高精度的浮点型
  • 布尔型:布尔型数据取值只有truefalse,使用前需包含头文件<stdbool.h>。定义方法:_Bool------布尔型

注:C语言中0表示假非0值表示真

二、signed和unsigned

在C语言中,signed和unsigned是用来修饰整型和字符型数据类型的关键字,用于指定该类型的取值范围和表示方式。

  • signed:用于声明有符号的类型,即该类型带有正负号,包含负值。
  • unsigned:用于声明无符号的类型,即该类型不带有正负号,只包含0和正整数。

注:整型(int)默认是带有正负号的,即int等价于signed int字符型(char)默认是否带有正负号,由当前系统决定,即char不一定等价于signed int

// vs2022中各类型的取值范围定义
signed short int a; // 范围为 -32768~32767
unsigned short int a; // 范围为 0~65535
signed char c; // 范围为 -128 到 127 
unsigned char c; // 范围为 0 到 255

vs2022环境中对各整型和字符型变量取值范围的定义:见vs2022中的limits.h文件
vs2022环境中对各浮点型变量取值范围的定义:见vs2022中的float.h文件
查看方式:使用everything软件搜索limits.h文件,打开Visual Studio 2022下的limits.h文件
everything软件下载地址:https://www.voidtools.com/downloads/

在这里插入图片描述
计算类型创建的变量的大小:sizeof()

#include <stdio.h>

int main()
{
    // sizeof(),计算变量所占内存的大小,单位为字节
    printf("%d\n", sizeof(char));  // 输出打印 1
    printf("%d\n", sizeof(short)); // 输出打印 2
    printf("%d\n", sizeof(int)); // 输出打印 4
    printf("%d\n", sizeof(long)); // 输出打印 4   C语言规定:sizeof(long)>=sizeof(int)>
    printf("%d\n", sizeof(long long)); // 输出打印 8
    printf("%d\n", sizeof(float)); // 输出打印 4
    printf("%d\n", sizeof(double)); // 输出打印 8
    return 0;
}

计算机中常见的基本单位及换算:

  • bit(位),最小的存储单位,存放一个二进制数,即 0 或 1,简写为b
  • Byte(字节),计算机处理数据的基本单位,8个二进制位为一个字节,一个汉字占两个字节,一个ASCLL码占一个字节,一个中文标点占两个字节,一个英文标点占一个字节,简写为B
  • 1Byte=8bit,1KB=1024Byte,1MB=1024KB,1GB=1024MB,1TB=1024GB,1PB=1024TB

三、变量

变量:C语言中经常变化的量(值)
常量:C语言中不变的量(值)
创建变量的语法:数据类型+空格+ 变量名

int age; // 创建整型变量age
float sum; // 创建单精度浮点型变量sum
char ch; // 创建了字符变量ch
_Bool flag; // 创建布尔类型变量flag

变量的初始化:在创建变量的同时给了一个初始值

int age = 18; // 创建整型变量age并初始化值为18
float sum = 66.6f; // 无f时编译器默认识别为double类型,加f后为float类型
char ch = 'w'; 
_Bool flag = true; 

变量的分类

  • 全局变量:在大括号外部定义的变量为全局变量,可以在整个工程中使用,放在内存的静态区
  • 局部变量:在大括号内部定义的变量为局部变量,只能在局部范围内使用,放在内存的栈区
#include <stdio.h>

int global = 100; //全局变量 

int main()
{
    int local = 56; //局部变量 
    printf("%d\n", local);
    printf("%d\n", global);
    return 0;
}

注:当局部变量和全局变量同名的时候,局部变量优先使⽤

四、操作符

(1)算术操作符(+、-、*、/、%)

C语⾔中为了⽅便运算,提供了⼀系列操作符(也叫运算符)。其中有⼀组操作符叫:算术操作符,分别是+、-、*、/、%,都是双目操作符
注:3 + 5,‘+’为操作符,3与5为操作数,有两个操作数,故为双目操作符。

#include <stdio.h>

int main()
{
    int a = 4 + 3; // 加法
    int b = 4 - 3; // 减法
    int c = a * b; // 乘法,输出结果 7
    int d1 = 7 / 2; // 整除,输出结果 3
    float d2 = 7 / 2; // 整除,输出结果 3.000000
    // 要使输出结果为小数,必须要使两个运算数(操作数)至少有一个为浮点数
    float d3 = 7.0 / 2; // 除法,输出结果 3.500000
    float d4 = 7 / 2.0; // 除法,输出结果 3.500000
    // 求模(取余)运算,只能用于整数,返回两个整数相除的余数
    int d5 = b % a; // 取余,输出结果 1
    // 负数求模的规则是,结果的正负号由第⼀个运算数的正负号决定
    int d6 = 3 % -5; // 取余,输出结果 3
    int d7 = -3 % 5;// 取余,输出结果 -3
    printf("%d %d %f %f %f %d %d %d",c,d1,d2,d3,d4,d5,d6,d7);
    return 0;
}

注:

  • %,求模(取余)运算,只能用于整数,返回两个整数相除的余数
  • 负数求模的规则:结果的正负号由第⼀个运算数的正负号决定
  • /,整除运算,若要输出结果为小数,则 a / b 中,a,b至少有一个为小数
  • float 类型数据,打印输出时,默认保留6位小数

(2)赋值操作符:=和复合赋值

在变量创建的时候给⼀个初始值叫初始化,在变量创建好后,再给⼀个值,这叫赋值。
复合赋值:+=、-= 、*=、/= 、%=

#include <stdio.h>

int main()
{
	int a = 10; //初始化 
	a = 20; //赋值,这⾥使⽤的就是赋值操作符 
	int b = 7;
	int c = 5;
	c = b = a - 1; // 连续赋值,从右向左依次赋值,输出结果 19
	a += 3; // 复合赋值 等价于 a = a + 3; 输出结果 23
	b -= 2; // 复合赋值 等价于 b = b - 2; 输出结果 17
	printf("%d %d %d\n", c,a,b);

}

(3)单⽬操作符:++、- -、+、-

前⾯介绍的操作符都是双⽬操作符,有2个操作数。C语⾔中还有⼀些操作符只有⼀个操作数,被称为单⽬操作符。++、- -、+(正号)、-(负号)均为单⽬操作符。

#include <stdio.h>

// ++,自增1的运算;--,自减1的运算
int main()
{
	int a = 10; //初始化 
	a++; // 等价于 a=a+1; 或 a+=1;
	printf("%d\n", a);  // 输出结果 11
	++a; 
	printf("%d\n", a);  // 输出结果 12
	// 后置++,先使用a,后+1;前置++,先+1,后使用a
	int b = a++;
	printf("%d\n", b);  // 输出结果 12
	printf("%d\n", a);  // 输出结果 13
	int c = ++a;
	printf("%d\n", c);  // 输出结果 14
	// 后置--,先使用c,后-1;前置--,先-1,后使用c
	int d = c--;
	printf("%d\n", d);  // 输出结果 14
	printf("%d\n", c);  // 输出结果 13
	d = --c;
	printf("%d\n", d);  // 输出结果 12
	// -,负号,变正数为负数;+,正号,一般省略不写,效果一样
	a = -d;
	printf("%d\n", a);  // 输出结果 -12
}

(4)强制类型转换

强制转换数据的类型。语法:(类型)

// 将3.14类型强制转换为int型,这种转换只取整数部分
int a = (int)3.14;  // 输出结果 3

(5)逗号表达式

c语言提供了一种特殊运算符,逗号运算符,优先级别最低,它将两个及其以上的式子联接起来,从左往右逐个计算表达式整个表达式的值为最后一个表达式的值。如a=(1+2,2+3),返回结果为5;a=(a=3×5,a×4),返回结果为60。
语法格式:

(expression1, expression2, ..., expressionN)

五、代码理解

#include <stdio.h>

int main() {
	int a, b, c;
	a = 5;
	c = ++a;
	printf("a=%d; c=%d\n",a,c);  // 输出结果:a=6, c=6 
	system("pause");  // 暂停程序

	// 执行过程:
	// 先 b=++c; 再依次单独执行c++,++a,a++
	b = ++c, c++, ++a, a++;   // 非逗号表达式,此处赋值后,逗号后的表达式依次执行
	printf("a = %d; b = %d; c = %d\n", a, b, c); // 输出结果:a=8,b=7,c=8
	system("pause");  // 暂停程序

	// 执行过程:
	// 等价于 b = b + (a++ + c),先使用a,即b = b+(a+c),再a=a+1
	b += a++ + c;
	printf("a = %d;b = %d;c = %d\n", a, b, c); // 输出结果:a=9,b=23,c=8


	return 0;

}

运行截图:

在这里插入图片描述

  • 22
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值