「C」关键字、标识符、注释、内存分析、数据、常量、变量
一、关键字
C语言提供的有特殊含义的符号,共32个。
一般在Xcode中关键字全部显示紫褐色,关键字全部都为小写。如int、return等。
二、标识符
标识符是程序员在程序中自定义的一些符号和名称。关键字是C语言默认提供的,标识符是程序员自定义的。如函数的名称等,用来区分各种事务。
命名规则:
- 只能由26个小写字母,0-9的数字以及下划线_组成。
- 严格区分大小写。
- 不能以数字开头。
- 不可以使用关键字作为标识符。
命名规范:
(1)尽量起有意义的名称。
(2)多个单词可以使用驼峰标识(第二个单词开始的首字母大写)或者使用下划线连接。
三、注释
(1)注释用以解释代码的含义,提高程序的可读性,注释掉的代码不会参与编译,在开发工具中注释一般是豆沙绿色。
(2)注释的符号
单行注释 //
多行注释 /* */
(3)注释的作用:检查代码;排错。
(4)注释的嵌套
①. 单行注释可以嵌套单行注释,多行注释
②. 多行注释可以嵌套单行注释
③. 多行注释不可以嵌套多行注释
(5)注意:printf("//abc");这里的//在双引号内是字符串的一部分而非注释。
四、内存分析
(一)进制
概念:进制是一种计数方式,是数值的表现形式
4种主要的进制:
①. 十进制:0 ~ 9
②. 二进制:0和1
③. 八进制:0 ~ 7
④. 十六进制:0 ~ 9 + a b c d e f
C语言在默认的情况下为十进制。
int num=1010; // 十进制
int num=0b1100; // 二进制,以0b或者是0B开头
int num=014; // 八进制,以0开头
int num=0x4; // 十六进制,以0x开头
占位符:
%d和%i :一十进制整数的形式输出一个值
%o :以不带符号的八进制输出
%x :以不带符号的十六进制输出
%u :以不带符号的十进制输出
%c : 输出字符
%p : 输出地址
%f : 输出小数
%s : 输出字符串
n位二进制的取值范围:
2位……0 ~ 3 0 ~ 2的2次方-1
3位……0 ~ 7 0 ~ 2的3次方-1
n位……0 ~ 2的n次方-1
判断以下数据是否正确:
0x7h4 0986 .089 0b325 10e8.7 96f -.003
类型的取值:
在64位编译器下,int类型 占4个字节 共4x8=32bit char类型 占1个字节 共1x8=8bit ,在内存中以字节为单位进行存储。
(二)类型说明符
short== short int %d 2
long ==long int %ld 8
long long ==long long int %lld 8
signed ==signed int==int %d 4(有符号)
unsigned ==unsigned int %u 4(无符号)
signed和unsigned的区别:
①.最高位要不要拿来作为符号位,显然后者的取值范围更大。
②.这两个说明符可和long等说明符组合使用,但不会改变字节数。
③.unsigned代表int类型的最高位,不必用来作为符号位。
(三)位运算
(1)按位与 &
功能:只有对应的两个二进制位均为1时,结果才为1,否则为0。
示例:9 & 5 的结果为1
说明:如果位与上1则保留原值,与上0则为0。
应用:查询0101 0111 0000的倒数第六位是0还是1,则可以与上数值以判断,得出的结果是什么,那么它的原值就是什么。
0101 0111 0000
0000 0010 0000
0000 0010 0000
(2)按位或 |
功能:只要对应的两个二进制位有一个为1则结果为1,否则为0。
举例:9 | 5的结果为13
(3)按位异或 ^
功能:当对应的两个二进制位不相等时,结果为1,否则为0。
举例:9^5的结果为:12
规律:
①. 相同整数异或的结果为0,如5^5=0
②. 顺序可以交换。如9^5^9=9^9^5=0^5=5
③. 任何数值跟0进行异或,结果还是原来的数值。9^0=9
④. a^b^a==b
(4)按位取反 ~
举例:~ 9的结果为 -10
0000 0000 0000 0000 0000 0000 0000 1001
1111 1111 1111 1111 1111 1111 1111 0110
(5)左移 <<
如a<<n
把整数a的二进制位全部左移n位,高位丢弃,低位补零。左移n位的结果其实是乘以2的n次方,由于符号位会被丢弃,所以结果可能会改变正负性。
举例:9 << 1的结果为18
0000 1001
0010 0010
应用:如果某个数需要乘以2的n次方,那么使用位运算效率更高。
(6)右移 >>
如a>>n
把整数a的二进制位全部右移n位,低位丢弃,符号位不变,一般情况下高位用符号位补齐。右移的结果实际上是除以2的n次方。
(7)练习
①.使用位运算交换两个变量的值
1 #include<stdio.h>
2
3 int main()
4
5 {
6
7 int a=10;
8
9 int b=11;
10
11 printf("a=%d,b=%d\n",a,b);
12
13 a=a^b;
14
15 b=a^b;
16
17 a=a^b;
18
19 printf("a=%d,b=%d\n",a,b);
20
21 return 0;
22
23 }
②.使用位&运算符判断变量的奇偶性
1 #include<stdio.h>
2
3 int main()
4
5 {
6
7 printf("请输入需要判断的整数:\n");
8
9 int n;
10
11 scanf("%d",&n);
12
13 /*
14
15 if(n%2==0)
16
17 printf("这个数是偶数\n");
18
19 else
20
21 printf("这个数是奇数\n");
22
23 */
24
25 if((n&1)==1)
26
27 printf("这个数是奇数\n");
28
29 else if((n&1)==0)
30
31 printf("这个数是偶数\n");
32
33 return 0;
34
35 }
③.编写一个函数,输出整数的二进制格式
1 #include<stdio.h>
2
3 void putbinary(int number);
4
5 int main()
6
7 {
8
9 printf("这个程序的作用是把你输入的整数以二进制的格式输出\n");
10
11 printf("请输入一个整数:\n");
12
13 int n;
14
15 scanf("%d",&n);
16
17 putbinary(n);
18
19 return 0;
20
21 }
22
23
24
25 void putbinary(int number)
26
27 {
28
29 //int count=sizeof(number)*8-1;
30
31 int count=(sizeof(number)<<3)-1;//注意这里需要注明优先级
32
33 printf("%d\n",count);
34
35
36
37 while(count>=0)
38
39 {
40
41 int value=(number>>count)&1;
42
43 printf("%d",value);
44
45 //每四个数字,打印一个空格
46
47 if(count%4==0)
48
49 printf(" ");
50
51 count--;
52
53 }
54
55 }
(四)char类型
(1)基础
char c=‘A’;
字符在内存中也是也二进制的格式存储的。
int num=6; // 在内存中以00……0110存储
char num=‘6’; // 对应的ascii码值是54=32+16+4+2,在内存中为11 0110
两者之间有着本质的区别,一个是具体的整数值,一个是字符,以ASCII格式存储。
(2)使用注意
单引号只能括住单字节的字符,ASCII中的所有字符都是单字节的。
char c=’男’; // 错误,因为一个汉字占据3个字节的存储空间
char c=”A”; // 错误,这是字符串,为‘A’+‘\0’。
char c=65; // 正确,另一种形式而已
char类型占据一个字节,所以它的取值范围为-128~127。
帮助:输出一个\,使用\\,输出一个单引号使用\’,输出一个双引号,使用\"。
练习:编写一个函数,将小写字母转换为大写。
1 #include<stdio.h>
2
3 char upper(char c)
4
5 {
6
7 if(c>='a'&&c<='z')
8
9 return c-('a'-'A');
10
11 else
12
13 return c;
14
15 }
16
17 int main()
18
19 {
20
21 char a=upper('b');
22
23 printf("%c\n",a);
24
25 return 0;
26
27 }
五、数据
图片文字等都是数据,在计算机中以0和1存储。
(一)分类
数据分为静态数据和动态数据。
①. 静态数据:一些永久性的数据,一般存储在硬盘中,一般以文件的形式存储在硬盘上,计算机重启后依然存在。只要不主动删除或者硬盘没坏数据永远都在。
②. 动态数据:程序运行过程中,动态产生的的临时数据,一般存储在内存中,内存的存储空间一般较小,计算机关闭后这些数据就会被清除。软件或者计算机关闭则这些临时数据会被清除。
③. 静态数据和动态数据可以转换。
④. 注意:为什么不把动态数据存放到硬盘?因为内存的访问速度比硬盘快N倍。软件安装在硬盘,运行时加载到内存中。程序员应该更加关心内存数据。
(二)数据大小
①. 所有的数据都是由0和1组成的。
②. 数据都有大小,静态数据占硬盘空间,动态数据占内存空间。
③. 数据越大,包含的0和1就越多,
④. 存储数据的单位是比特位和字节。一个1或者0就是一个比特位,即1bit。
⑤. 计算机中,以字节为单位存储数据。1字节=8比特位(1Byte=8bit)。
⑥. 1 KB = 1024 B,1 MB = 1024 KB,1 GB = 1024 MB,1 TB = 1024 GB
(三)C语言中的数据类型
1.基本数据类型
1) 整型 (int %d)
2) 字符型 (char %c)
3) 浮点型 %d
①. 单精度浮点型(float)
②. 双精度浮点型(double)
2.指针类型 void *
3.空类型 void
4.构造类型
1) 数组 a[]
2) 结构体 struct
3) 枚举 enum
4) 共用体 union
注意:C语言中没有布尔类型,一般使用0和1表示。
六、常量
(一)定义
常量,表示一些固定的数据
(二)分类
①. 整型常量 如6、27、109、256、-10、0、-289
②. 浮点型常量 如5.43、-2.3、0.0、5.43f、-2.3f、0.0f
③. 字符常量 如'6'、'a'、'F'、'+'、'$'(不能是中文如‘男’)
④. 字符串常量 如"6"、"男"、"哇哈哈"、"abcd"、"my_car4"
七、变量
(一)定义
如果一个数据的值是不确定的,或者经常需要改变,则用变量来表示。
(二)定义变量
目的:使用变量前必须先进行定义。在内存中分配一块存储空间给变量,方便以后存储数据。如果定义了多个变量,则为多个变量分别分配不同的存储空间。
格式:变量类型 变量名;
举例:int a;char c;int num1,num2;
注意:变量名属于标识符,需要符合标识符的命名规范。
记住:只要是不确定的数据就应该定义变量来进行保存。在64位编译器下,int类型占4个字节,共4*8=32bit,char类型占1个字节。
问:为什么定义的变量有很多的类型?
答:不同类型的变量占用不同大小的存储空间,因为内存极其有限,分配适当的空间来存储它们可以节省空间。
(三)变量的使用
初始化:1.int a;a=10;2.int a=10;
修改:可以修改变量的值,多次赋值。每次赋值都会覆盖原来的值
输出:使用占位符输出变量。各种类型的占位符如下:
int %d或者%i
float /double %f(默认情况下输出6位,可以使用.2f来控制)
long %ld
long long %lld
char %c
字符串 %s
unsigned long %zd
(四)变量的内存分析
1.字节和地址
①.内存以“字节为单位”,计算机中通常以十六进制(0x)表示地址
②.不同类型占用的字节不一样,数据越大,所需的字节数越多
2.变量的存储
①.所占用字节数跟类型有关,也跟编译器环境有关
②.变量实例
int b = 10;
int a = 20;
内存由大到小寻址,优先分配内存地址较大的字节给变量。b的内存地址比a大
每个变量都有地址:第一个字节的地址就是变量的地址
③.查看内存地址:%x和%p
int a;
printf("a的地址是:%p\n", &a);
④.查看整数的二进制形式
1 void putBinary(int n)
2 {
3 int bits = sizeof(n) * 8;
4 while (bits --> 0) {
5 printf("%d", n >> bits & 1);
6 if (bits % 4 == 0) printf(" ");
7 }
8 printf("\n");
3.负数在内存中的存储
①.一个字节的取值范围
②.负数的表示形式
③.原码、反码、补码
4.取值范围
(五)变量使用注意
变量的作用域:从变量定义的那一行开始,直到代码块{}结束。代码块{}可以用来提高性能,即时回收不再使用的变量。
return:退出函数,清除内存中的数据。
建议使用矩形方框和excel来分析内存。
(六)习题
练习:交换整型变量a、b的值,用多种方式实现:
方法一:使用中间变量
1 #include<stdio.h>
2 //交换两个变量的值
3
4 int main()
5
6 {
7
8 int a = 10;
9
10 int b = 11;
11
12 printf("交换前a = %d,b = %d\n",a,b);
13
14 //定义一个中间变量来完成两个变量之间的交换
15 int temp;
16
17 temp = a;
18
19 a = b;
20
21 b = temp;
22
23 printf("交换后a = %d,b = %d\n",a,b);
24
25 return 0;
26
27 }
方法二:不使用中间变量
1 #include<stdio.h>
2
3 int main()
4
5 {
6
7 int a = 10;
8
9 int b = 11;
10
11 printf("交换前a = %d,b = %d\n",a,b);
12
13 a = b - a;
14
15 b = b - a;
16
17 a = a + b;
18
19 printf("交换后a = %d,b = %d\n",a,b);
20
21 return 0;
22
23 }
方法三:使用位异或
1 #include<stdio.h>
2
3 int main()
4
5 {
6
7 int a = 10;
8
9 int b = 11;
10
11 printf("交换前a = %d,b = %d\n",a,b);
12
13 a = b ^ a;
14
15 b = a ^ b;
16
17 a = a ^ b;
18
19 printf("交换后a = %d,b = %d\n",a,b);
20
21 return 0;
22
23 }
「C」关键字、标识符、注释、内存分析、数据、常量、变量的更多相关文章
- 「跬步千里」详解 Java 内存模型与原子性、可见性、有序性
文题 "跬步千里" 主要是为了凸显这篇文章的基础性与重要性(狗头),并发编程这块的知识也确实主要围绕着 JMM 和三大性质来展开. 全文脉络如下: 1)为什么要学习并发编程? 2) ...
- 黑马程序员——C语言基础语法 关键字 标识符 注释 数据及数据类型
Java培训.Android培训.iOS培训..Net培训.期待与您交流! (一下内容是对黑马苹果入学视频的个人知识点总结) (一)C语言简单介绍 (1)C语言程序是由函数组成的任何C语言程序都是由一 ...
- 「转载」关于Service常驻内存不被清理
http://www.cnblogs.com/fangyucun/p/3533731.html 作个记录
- IOS内存管理「2」- 点语法的内存管理
- 「MoreThanJava」Day 1:环境搭建和程序基本结构元素
「MoreThanJava」 宣扬的是 「学习,不止 CODE」,本系列 Java 基础教程是自己在结合各方面的知识之后,对 Java 基础的一个总回顾,旨在 「帮助新朋友快速高质量的学习」. 当然 ...
- JAVA之旅(一)——基本常识,JAVA概念,开发工具,关键字/标识符,变量/常量,进制/进制转换,运算符,三元运算
JAVA之旅(一)--基本常识,JAVA概念,开发工具,关键字/标识符,变量/常量,进制/进制转换,运算符,三元运算 Android老鸟重新学一遍JAVA是什么感觉?枯燥啊,乏味啊,而且归纳写博客,都 ...
- -1-1 java 基础语法 java关键字 java 注释 常量 语句 运算符 函数 数组定义
Java语言基础组成 关键字 标识符 注释 常量和变量 运算符 语句 函数 数组 关键字 定义:被Java语言赋予了特殊含义的单词 特点:关键字中所有字母都为小写 用于定义数据类型的关键字 class ...
- 「USACO16OPEN」「LuoguP3147」262144(区间dp
P3147 [USACO16OPEN]262144 题目描述 Bessie likes downloading games to play on her cell phone, even though ...
- 「题解」「HNOI2013」切糕
文章目录 「题解」「HNOI2013」切糕 题目描述 思路分析及代码 题目分析 题解及代码 「题解」「HNOI2013」切糕 题目描述 点这里 思路分析及代码 题目分析 这道题的题目可以说得上是史上最 ...
随机推荐
- Android面试笔试集锦
前19题为常考题目 1. Android的四大组件是哪些,它们的作用? 答:Activity:Activity是Android程序与用户交互的窗口,是Android构造块中最基本的一种,它需要为保持各 ...
- 【每周一译】愚蠢的指标:Java中使用最多的关键字
此翻译纯属个人爱好,由于水平所限,翻译质量可能较低.网络上可能存在其它翻译版本,原文地址:http://blog.jooq.org/2013/08/26/silly-metrics-the-most- ...
- Delphi Excel FastReport
unit Unit1; interface uses Printers,Windows, Messages, SysUtils, Variants, Classes, Graphics, Contro ...
- windows service 的创建 安装 调试 错误回发
关于如何快速创建一个windows服务 1.在vs中创建windows服务 名称:你要写的服务名称 位置:创建服务所在的位置 点击确定 2.代码编写 3.添加安装程序 点击添加安装程序出现 分别右击设 ...
- ASP.NET之电子商务系统开发-1(数据列表)
一.前言 首先声明的是,这是我第一个与别人合作的.net项目,另一个人做的是后台管理,我做的前台,这是一个电子商务的系统,主要实现的功能是查看商品以及购物功能. 二.开始 首先看一下我截取的项目部分商 ...
- zoj 1083 Frame Stacking
其实就是一个拓补排序.(动态记录第i个之上的j存不存在,反过来就是第j个之下的i) 首先确立每个框的位置(题目明确说了每一边都不会被完全覆盖)./*可以通过搜索,搜索到该框的所有四个角*/||如果题目 ...
- Oracle中的Spool缓冲池技术可以实现Oracle导出txt格式文件
利用Oracle中的Spool缓冲池技术可以实现Oracle数据导出到文本文件 1.在Oracle PL/SQL中输入缓冲开始命令,并指定输出的文件名: spool d:output.txt; 2.设 ...
- 5.4.2 RegExp实例方法
RegExp对象的主要方法是exec(),该方法是专门为辅助组而设计的.exec()接受一个参数,即要应用模式的字符串,然后返回包含第一个匹配项信息的数组:或者在没有匹配项的情况下返回null.返回的 ...
- MySql 日期转字符串
1.date_format 日期转字符串 select date_format(now(),'%Y-%m-%d %H:%i:%s'); 2.str_to_date 字符串转日期 select str_ ...
- php学习笔记(2)
1.算数运算 <?php $a = 8; $b = 2; $c = 3; echo $a+$b."<br>\n"; echo $a-$b."<br ...