2.2 变量相关概念

本文回顾了C语言中的变量和常量概念。常量包括直接常量、标识符和符号常量;变量则涉及定义、命名规则及内存分配。文章还探讨了C语言编程风格、基本数据类型以及如何计算数据类型的大小。此外,还详细讲解了字符类型,包括字符常量和字符变量,并介绍了隐式类型转换和scanf的工作原理。
摘要由CSDN通过智能技术生成

变量相关概念回顾:

回顾内存RAM功能和特点:


1.字节(byte):计算机将内存分成一格一格,每一格用来存储一个数字,每一格对应的专业术语叫字节。

2.地址(address):计算机给内存的每个字节都指定一个唯一编号,编号从0开始,后续字节编号依次+1

3.存储区(buffer):计算机将1字节或者多个连续的字节形成一个存储单元简称存储区,又称缓冲区

4.首地址(base address):又称起始地址,存储区中的第一个字节的地址用来当存储区的首地址,又称基地址

5.原则:任何程序访问内存前先分配(操作系统负责分配)

1GB = 1024MB = 1024*1024KB = 1024*1024*1024B(Byte)


常量与变量:

在程序执行过程中,其值不发生改变的量称为常量

-直接常量(字面值)

        整型量:10, 10u, 10L, 10LL, 0X12, 0XA

        实型量:0.12, 0.12F, 1.2E-1

        字符型:'A', '\n'

        字符串:”Hello,world\n‘ (字符串是常量)

-标识符

        标识变量名、数组名、函数名、类型名的有效字符序列

-符号常量

        符号化的常量,如宏定义,枚举元素等


在程序执行过程中,其值可以改变的量称为变量

-定义变量(第一种内存分配方式)

        数据类型 变量名 = 初始值;

        int a = 233;

        本质:分配4字节内存并储存233,内存打个标签叫a

-变量名必须是合法的标识符(变量名或者函数名)

        字母或下划线开头,不能是数字开头

        Int var = 233; int _var =222; int 2var = 233;(X)

-包含字母、下划线和数字

-不能与关键字冲突

        int int = 233;

-大小写敏感

        int VAR = 233;


C语言的编程风格


单条语句可写在任意多行内

        int main(void) {printf("hello world"); return 0;}

必要的空格令代码更加清晰

严格的缩进令代码层次分明

适度的空行划分出逻辑单元

统一用驼峰或者下划线命名

        int nAge = 19; //单峰

        int CreateWindows = 233; // 双峰

        int create_windows = 233; // 下划线


基本数据类型


数据类型功能:gcc预算将来分配内存大小

关键字

含义

分配内存

值域

标记符

char

字符类型(1字节整数)

1字节

-123~127

%c

unsigned char

非负1字节整型

1字节

0~255

会被提升为%d或者%u

short

2字节整型

2字节

-32768~32767

%hd

unsigned short

非负2字节整型

2字节

0~65535

%hu

int

4字节整型

4字节

-2^31~2^31-1

%d

unsigned int

非负4字节整型

4字节

0~2^32-1

%u

long

4(32位)/8(64位) 整型

4/8字节

2^31/63~2^31/63-1

%ld

unsigned long

非负4/8字节整型

4/8字节

0~2^32/64-1

%lu

long long

8字节整型

8字节

-2^63~2^63-1

%lld

unsigned long long

非负8字节整型

8字节

0~2^64-1

%llu

float

单精度浮点数

4字节

+-[1.2*10^38~3.4^10^38]

%f/%g

double

双精度浮点数

8字节

+-[2.2*10^308~1.8*10^308]

%lf/%lg

lf:3.140000

会自动补零

lg: 3.14

不会自动补零


计算数据类型大小


sizeof(参数)

        1.计算内存的大小,以字节为单位

        2.参数可以是类型、变量或表达式

                sizeof(a),sizeof(int),size(a+1)

        3.不计算参数的值,只关注其类型

        4.赋值作为无效处理

                sizeof的计算结果类型是一个unsigned long类型,标记符用 %lu

        提问:

                char b=1,c=2;

                printf("sizeof(b+c)=%lu\n",sizeof(b+c)) 为何输出为4?

            答: 隐式类型转换,%lu将char强转为int类型了

        隐式类型转换:gcc自动转换,先转换后运算,小转大,整转浮,有符号转无符号

        printf(1?1:0.9); 0.9默认double类型,强转为double类型


细说字符类型(基本数据类型)


字符常量 字符常量不可更改

        用单引号括起来表示,例如:'A'

        本质内存存储的是一个整数,即字符的ASCII码

                字符常量 ’A‘ 对应的整数时65

’                d‘ - 'a' = 本质是100 -97 =3

                char c = 'A';

                printf("c = %c\n", c); //按照字符形式打印输出 A

                printf("c = %hhd", c); //按照ASCII码整型数形式输出 65

                c = c + 1; %c B %hhd 66

                c = 67; %c C %hhd 67

字符变量

        char/unsigned char

        分配一字节

        printf/scanf格式化占位符:%c或者%hhd

char e = '22'; 字符常量,且是无效字符

        这里解释一下scanf工作原理

                输入22时,scanf("%c",&c);会取一个字符,即取走2,此时scanf的buff区还有 一个2,会放入下一次的输入中。

        其中,scanf("%*c");会自动读取一个字符,被用来做清除使用

char e = 10; 是char类型,是以ASCII码作为值赋给变量,即字符变量

char e = "10" 字符串

转义字符:

转义练习代码如下:

#include <stdio.h>
 int main(void){
     printf("hello\n");  //hello
     printf("1234\rabc\n");  //abc   \r回到行首,先输出1234,而后被abc覆盖掉,即只打印abc
     printf("%d\t%d\n", 100, 200); //100 200
     printf("%d\t%d\n", 300, 400); //300
                                   //    400
     printf("hello\bworld\n");  //hellworld 覆盖o
     printf("hello\\world\n");  //hello\world
     printf("\'hello\'\n"); //'hello'
     printf("\"hello\"\n"); //"hello"
     printf("100%%\n"); //100%
     return 0;
 }

练习:


1.把数字字符转换为整数:’5‘ -> 5

 #include <stdio.h>
 int main(void){
     char c = '5';
     int b = '5' - '0';
     printf("%d\n",b);
     return 0;
 }

2.把小写字母转换为大写字母 ’a‘ -> 'A'

'a' 97			'A' 65		97-65 = 32
'b' 98						b-32 = B
     char c1 = 'B';
     char c2 = 'b';
     char c3 = 'a';
     char c4 = c3 - (c2-c1);
     printf("%c\n",c4);

整型类型 浮点类型:

整型类型:

        [signed/unsigned] short/int/long/long long

-字面值前缀:

        无:十进制,例如:520

        0:八进制。例如:0520

        0x:十六进制,例如:0x520

-字面值后缀[核心,用于数据类型转换]

        无:int, 例如:100

        U/u:unsigned int, 例如:100U/100u

        L/l:long,例如:100L/100l

        LL/ll:long long, 例如:100LL/100ll

        UL/ul:unsigned long,例如:100UL/100ul

浮点类型:

        float/double

-字面值后缀

        无:double,如1.23

        F/f:float,例如:1.23F/1.23f

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值