一、关键字

  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」关键字、标识符、注释、内存分析、数据、常量、变量的更多相关文章

  1. 「跬步千里」详解 Java 内存模型与原子性、可见性、有序性

    文题 "跬步千里" 主要是为了凸显这篇文章的基础性与重要性(狗头),并发编程这块的知识也确实主要围绕着 JMM 和三大性质来展开. 全文脉络如下: 1)为什么要学习并发编程? 2) ...

  2. 黑马程序员——C语言基础语法 关键字 标识符 注释 数据及数据类型

    Java培训.Android培训.iOS培训..Net培训.期待与您交流! (一下内容是对黑马苹果入学视频的个人知识点总结) (一)C语言简单介绍 (1)C语言程序是由函数组成的任何C语言程序都是由一 ...

  3. 「转载」关于Service常驻内存不被清理

    http://www.cnblogs.com/fangyucun/p/3533731.html 作个记录

  4. IOS内存管理「2」- 点语法的内存管理

  5. 「MoreThanJava」Day 1:环境搭建和程序基本结构元素

    「MoreThanJava」 宣扬的是 「学习,不止 CODE」,本系列 Java 基础教程是自己在结合各方面的知识之后,对 Java 基础的一个总回顾,旨在 「帮助新朋友快速高质量的学习」. 当然 ...

  6. JAVA之旅(一)——基本常识,JAVA概念,开发工具,关键字/标识符,变量/常量,进制/进制转换,运算符,三元运算

    JAVA之旅(一)--基本常识,JAVA概念,开发工具,关键字/标识符,变量/常量,进制/进制转换,运算符,三元运算 Android老鸟重新学一遍JAVA是什么感觉?枯燥啊,乏味啊,而且归纳写博客,都 ...

  7. -1-1 java 基础语法 java关键字 java 注释 常量 语句 运算符 函数 数组定义

    Java语言基础组成 关键字 标识符 注释 常量和变量 运算符 语句 函数 数组 关键字 定义:被Java语言赋予了特殊含义的单词 特点:关键字中所有字母都为小写 用于定义数据类型的关键字 class ...

  8. 「USACO16OPEN」「LuoguP3147」262144(区间dp

    P3147 [USACO16OPEN]262144 题目描述 Bessie likes downloading games to play on her cell phone, even though ...

  9. 「题解」「HNOI2013」切糕

    文章目录 「题解」「HNOI2013」切糕 题目描述 思路分析及代码 题目分析 题解及代码 「题解」「HNOI2013」切糕 题目描述 点这里 思路分析及代码 题目分析 这道题的题目可以说得上是史上最 ...

随机推荐

  1. Android面试笔试集锦

    前19题为常考题目 1. Android的四大组件是哪些,它们的作用? 答:Activity:Activity是Android程序与用户交互的窗口,是Android构造块中最基本的一种,它需要为保持各 ...

  2. 【每周一译】愚蠢的指标:Java中使用最多的关键字

    此翻译纯属个人爱好,由于水平所限,翻译质量可能较低.网络上可能存在其它翻译版本,原文地址:http://blog.jooq.org/2013/08/26/silly-metrics-the-most- ...

  3. Delphi Excel FastReport

    unit Unit1; interface uses Printers,Windows, Messages, SysUtils, Variants, Classes, Graphics, Contro ...

  4. windows service 的创建 安装 调试 错误回发

    关于如何快速创建一个windows服务 1.在vs中创建windows服务 名称:你要写的服务名称 位置:创建服务所在的位置 点击确定 2.代码编写 3.添加安装程序 点击添加安装程序出现 分别右击设 ...

  5. ASP.NET之电子商务系统开发-1(数据列表)

    一.前言 首先声明的是,这是我第一个与别人合作的.net项目,另一个人做的是后台管理,我做的前台,这是一个电子商务的系统,主要实现的功能是查看商品以及购物功能. 二.开始 首先看一下我截取的项目部分商 ...

  6. zoj 1083 Frame Stacking

    其实就是一个拓补排序.(动态记录第i个之上的j存不存在,反过来就是第j个之下的i) 首先确立每个框的位置(题目明确说了每一边都不会被完全覆盖)./*可以通过搜索,搜索到该框的所有四个角*/||如果题目 ...

  7. Oracle中的Spool缓冲池技术可以实现Oracle导出txt格式文件

    利用Oracle中的Spool缓冲池技术可以实现Oracle数据导出到文本文件 1.在Oracle PL/SQL中输入缓冲开始命令,并指定输出的文件名: spool d:output.txt; 2.设 ...

  8. 5.4.2 RegExp实例方法

    RegExp对象的主要方法是exec(),该方法是专门为辅助组而设计的.exec()接受一个参数,即要应用模式的字符串,然后返回包含第一个匹配项信息的数组:或者在没有匹配项的情况下返回null.返回的 ...

  9. MySql 日期转字符串

    1.date_format 日期转字符串 select date_format(now(),'%Y-%m-%d %H:%i:%s'); 2.str_to_date 字符串转日期 select str_ ...

  10. php学习笔记(2)

    1.算数运算 <?php $a = 8; $b = 2; $c = 3; echo $a+$b."<br>\n"; echo $a-$b."<br ...