C语言—数据类型

2024-01-08 02:01:25

变量和基本数据类型

变量类型的概念

变量是在程序中可以发生变化的量,变量是有类型的,变量的类型决定了变量存储空间的大小以及如何解释存储的位模式。

1字节(Byte)=8位(bit)

定义格式

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

例如:

(auto) int? a;

存储类型:

? ? ? ? auto、static、register、extern

变量名:

? ? ? ? 是标识符,要遵循标识符命名规则

数据类型:

? ? ? ? 包含名称、大小(单位字节)和取值范围

? ? ? ? char、short、int、long、float、double、signed、unsigned

类型存储大小值范围
char字符类型1字节-2^7 ~ 2^7-1
unsigned char无符号字符类型1字节0 ~ 2^8-1
int整数类型4字节-2^31 ~ 2^31-1
unsigned int无符号整数类型4字节0 ~ 2^32-1
short短整型2字节-2^15 ~ 2^15-1
unsigned short无符号短整型2字节0 ~ 2^16-1
long长整型4字节-2^31 ~ 2^31-1
unsigned long无符号长整型4字节0 ~ 2^32-1
float单精度浮点型4字节有效数据到小数点后6~7位
double双精度浮点型8字节有效数据到小数点后15~16位

例如:

int c=10,d=10;
float a=33.33333333;
double b=33.33333333;
printf("%f\n%lf\n%d %d\n",a,b,c,d);

输出结果为:

33.333332

33.333333

10 20

初始化格式

定义时初始化

int? a=10;

先定义再初始化

int? a;

a=10;

局部变量和全局变量

相关概念

生命周期?

变量的生命周期是指变量从创建到销毁之间的一个时间段,也就是存活的周期,是时间维度。

作用域

作用域是指变量可以起作用的范围,是空间维度。

内存分区

全局变量和局部变量的区别:

局部变量全局变量
定义位置函数体内部函数体外部
存储位置栈区全局区
生命周期同函数体共存亡同整个程序共存亡
作用域作用于函数体内部作用于整个程序
初值未初始化时是随机值未初始化时是0
#include <stdio.h>
#include <stdlib.h>

int n1;
int mai(int args,char const *argv[])
{
    int nn2;
    printf("%d %d\n",n1,n2);
    return 0;
}

输出结果为:

0? ? 7153974

常量

概念

程序运行过程中不会发生改变的量叫做常量,常量存放在常量区。

分类

字符型常量

字符型常量属于char类型,从ASCII码表里面能找到的都是字符型常量,用单引号括起来表示,不可以改变,例如:‘A’ 。

类型存储大小值范围
char字符类型1字节-128 ~ 127
unsigned char无符号字符类型1字节0 ~ 255
signed char有符号字符类型1字节-128 ~ 127
原码、补码和反码

最高位表示符号位,正数是0,负数是1

正数的原码、补码、反码都一样

负数要用补码来计算:

????????原码:在数值前面直接加符号位表示

????????反码:符号位不变,其他位按原码取反

????????补码:反码加一

例如:

-5:

? ? ? ? 原码:1000 0101

? ? ? ? 反码:1111? 1010

? ? ? ? 补码:1111? 1011

用‘’(单引号)括起来的就是字符型常量:

‘a’? ? ? ? ?字符a

‘\0’? ? ? ? 空字符

‘\n’? ? ? ? 换行符

例如:

char c='a';//把字符常量a赋值给字符型变量
printf("%c\n",'A');
printf("%c\n",66);
printf("%c\n",'\x42');//十六进制的ASCII码值表现形式
printf("%c\n",'\102');//八进制的ASCII码值表现形式
printf("%c\n",c);
printf("%c\n",'A'+32);
printf("%c\n",'A'+' ');
printf("%c\n",'A'+1);

补充:

在C语言中规定转义字符 ‘\x41’ 中的 \ 是转义字符引导符,后面跟一个x,表示x后面的数字是十六进制表示法,用 ‘’(单引号)括起来表示字节ASCII码值。转义字符 \ 后面直接加数字表示转义字符后面的数字是八进制表示法,代表转义成八进制的字符。

字符串常量

用 “”(双引号)括起来的就是字符串,字符串后面会自动加上一个 ‘\0’ ,表示字符串结束 。

例如:

? ? ? ? “hello” 字符串结尾有一个 ‘\0’

printf("hello\n");
printf("%s","hello");
整型常量

整型常量是类型为整数的常量,包括从负数到零到正数所有的整数,可以用二进制、八进制、十进制、十六进制表示。

例如:

int a=15;//把整数常量赋值给整数变量
printf("%d\n",a);
printf("%d\n",0b1111);//二进制输出15
printf("%d\n",017);//八进制输出15
printf("%d\n",15);//十进制输出15
printf("%d\n",0xF);//十六进制输出15

以上输出的结果都是15

浮点型常量

浮点型常量就是为浮点数的常量,包括从负数到零到正数所有的浮点数。

数据类型有float和double。

指数常量

指数常量就是用科学计数法表示的常量。

例如:

? ? ? ? 300000 = 3*10^5 = 3e+5

????????0.0000002 = 2*10^-7 = 2e-7

标识符常量(宏定义)

宏定义:起标识符的作用

单纯的文本替换,在预处理的时候进行。

必须遵循标识符的命名规则。

一般大写标识。

格式:#define? 宏名? 常量或表达式

特点:只能单纯的文本替换,不要进行手动运算,(原样替换,替换完再进行计算)。

#include <stdio.h>
#include <stdlib.h>

#define ONE 
#define TWO ONE+ONE
#define MORE TWO+ONE+ONE+ONE+ONE+ONE+ONE
#define HELLO "Hello"

int main(int argc,char const *argv[])
{
    printf("%d\n",MORE);
    printf("%s\n",HELLO);
}

如果一个串长于一行,可在行尾用反斜杠 ‘\’ 进行续行

#define N 2
#define M N+3  //2+3  
#define NUM N+M/2+1  //2+2+3/2+1 = 6
void main()
{
    int a=NUM;
    printf("%d\n",a);  //6
}

文章来源:https://blog.csdn.net/weixin_45725380/article/details/135395259
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。