C语言数据类型和变量

1.数据类型介绍

C语言提供的各种数据类型如下图所示,本次将主要探讨内置数据类型。

char//字符型
[signed] char//有符号的
unsigned char//⽆符号的

//短整型
short [int]
[signed] short [int]
unsigned short [int]
//整型
int
[signed] int
unsigned int
//⻓整型 
long [int]
[signed] long [int]
unsigned long [int]
//更⻓的整型
long long [int]
[signed] long long [int]
unsigned long long [int]

//浮点型
float
double
long double

//布尔型
 _Bool
//表示真假,布尔类型变量的取值是:true 或者false.

 2.各种数据类型的⻓度

每⼀种数据类型都有⾃⼰的⻓度,使⽤不同的数据类型,能够创建出⻓度不同的变量,变量⻓度的不同,存储的数据范围就有所差异。

sizeof 操作符的操作数可以是类型,也可是变量或者表达式。⽤来计算sizeof的操作符数的类型⻓度的,单位是字节。

扩展:Byte——字节       bit——比特位

1Byte=8bit

1KB=1024Byte

1MB=1024KB

1GB=1024MB

1TB=1024GB

1PB=1024TB

……

#include <stdio.h>
int main()
{
    printf("%zd\n", sizeof(char));//1
    printf("%zd\n", sizeof(_Bool));//1
    printf("%zd\n", sizeof(short));//2
    printf("%zd\n", sizeof(int));//4
    printf("%zd\n", sizeof(long));//4
    printf("%zd\n", sizeof(long long));//8
    printf("%zd\n", sizeof(float));//4
    printf("%zd\n", sizeof(double));//8
    printf("%zd\n", sizeof(long double));//8
    return 0;
}
//后为输出

注意:sizeof 中表达式不计算,在代码进⾏编译的时候,就根据表达式的类型确定了,类型的常⽤,⽽表达式的执⾏却要在 程序运⾏期间才能执⾏,在编译期间已经将sizeof处理掉了,所以在运⾏期间就不会执⾏表达式了。

3.signed 和unsigned

signed 和 unsigned 关键字修饰字符型和整型类型,signed 关键字,表⽰⼀个类型带有正负号,包含负值;unsigned 关键字,表⽰该类型不带有正负号,只能表⽰零和正整数。

对于 int 类型,默认是带有正负号的,也就是说int 等同于 signed int,int 类型也可以不带正负号,只表⽰⾮负整数。这时就必须使⽤关键字unsigned 声明变量,unsigned int ⾥⾯int 可以省略。声明为 unsigned 的好处是,同样⻓度的内存能够表⽰的最⼤整数值,增⼤了⼀倍。

 注意:C语⾔规定 char 类型默认是否带有正负号,由当前系统决定。 这就是说, char 不等同于signed char ,它有可能是signed char ,也有可能是unsigned char ,这⼀点与 int 不同。

4.变量

C语⾔中把经常变化的值称为变量,不变的值称为常量,变量在创建的时候就给⼀个初始值,就叫初始化。语法创建形式为:

   data_type name;

     |                |

数据类型    变量名

变量的分类:

全局变量:在⼤括号外部定义的变量就是全局变量 全局变量的使⽤范围更⼴,整个⼯程中想使⽤,都是有办法使⽤的。(不初始化,默认值为0)

局部变量:在⼤括号内部定义的变量就是局部变量 局部变量的使⽤范围是⽐较局限,只能在⾃⼰所在的局部范围内使⽤。(不初始化,默认值为随机)

#include <stdio.h>
int global = 2023;//全局变量 
int main()
{
    int local = 2018;//局部变量
    printf("%d\n", local);
    printf("%d\n", global);
    return 0;
}

当局部变量和全局变量同名的时候,局部变量优先使⽤,全局变量和局部变量在内存中存储如下图所示:(栈区时临时使用的,静态区是可以长期使用的)

5.算术操作符:+、-、*、/、%

算术操作符:分别是: +(加) -(减) * /(C语⾔⾥⾯的整数除法是整除,只会返回整数部分,丢弃⼩数部分。除非两个运算数必须⾄少有⼀个浮点数,这时C语⾔就会进⾏浮点数除法。eg:6.0/4返回值为:1.5) %(求模运算,即返回两个整数相除的余值,结果的正负号由第一个运算数的正负号决定) ,这些操作符都是双⽬操作符。

赋值操作符:=和复合赋值

int a = 100;//初始化

a = 200;//赋值,这⾥使⽤的就是赋值操作符

c = b = a+3;//连续赋值,从右向左依次赋值的


int a = 10;
a += 3;
a -= 2;//复合赋值符
//常见的有
// +=  -=   *=   /=  >>=  &=  <<=  |=  %=  ^=

单⽬操作符:++  --  +(正)  -(负)

++是⼀种⾃增的操作符,⼜分为前置++和后置++,--为自减,与++同理。

前置++:先+1,后使⽤

后置++:先使⽤,后+1

int a = 10;
int b = --a;//操作数是a,是放在a的前⾯的,就是前置-- 
printf("a=%d b=%d\n",a , b);//输出的结果是:9 9

int b = a--;//-的操作数是a,是放在a的后⾯的,就是后置--
printf("a=%d b=%d\n",a , b);//输出的结果是:9 10

6.强制类型转换

eg:int a = (int)3.14;// 意思是将 3.14 double 类型强制类型转换为 int 类型,这种强制类型转换只取整数部分。

7.printf介绍

printf() 的作⽤是将参数⽂本输出到屏幕。它名字⾥⾯的 f 代表format (格式化),表⽰可以定制输出⽂本的格式。printf() 可以在输出⽂本中指定占位符。 所谓“占位符”,就是这个位置可以⽤其他值代⼊。

There are %d apples\n 是输出⽂本,⾥⾯的 %d 就是占位符,表⽰这个位置要 ⽤其他值来替换。占位符的第⼀个字符⼀律为百分号 % ,第⼆个字符表⽰占位符的类型,输出⽂本⾥⾯可以使⽤多个占位符,常见的有:

 

 printf() 允许限定占位符的最⼩宽度。

 eg:printf("%5d\n", 123); // 输出为 "  123"%5d 表⽰这个占位符的宽度⾄少为5位。如果不满5位,对应的值的前⾯会添加空格。 输出的值默认是右对⻬,即输出内容前⾯会有空格;如果希望改成左对⻬,在输出内容后⾯添加空格,可以在占位符的 % 的后⾯插⼊⼀个-号。对于⼩数,⼩数的默认显⽰精度是⼩数点后6位,这个限定符会限制所有数字的最⼩显⽰宽度。

printf() 不对正数显⽰ + 号,只对负数显⽰- 号。如果想让正数也输出 + 号,可 以在占位符的 % 后⾯加⼀个 + 。

输出分别为:+12、-12

输出⼩数时,有时希望限定⼩数的位数。举例来说,希望⼩数点后⾯只保留两位,占位符可以写 成 %.2f 。

输出为:0.50。这种写法可以与限定宽度占位符,结合使⽤。

 最⼩宽度和⼩数位数这两个限定值,都可以⽤ * 代替。

%s 占位符⽤来输出字符串,默认是全部输出。如果只想输出开头的部分,可以用%.[m]s 指定输出的⻓度,其中 [m] 代表⼀个数字,表⽰所要输出的⻓度。

 8.scanf介绍

们需要给变量输⼊值就可以使⽤scanf 函数,如果需要将变量的值输出在屏幕上的时候可以使⽤ prinf 函数,下⾯看⼀个例⼦:

#include <stdio.h>
int main()
{
	int score = 0;
	printf("请输入成绩:");
	//输入
	scanf("%d", &score);
	return 0;
}

注意在VS2022中会出现报错情况:

我们可以将错误中的“#define _CRT_SECURE_NO_WARNINGS 1” 置于代码第一行就不会报错啦!
 

运行结果如下:

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值