黑马程序员——C语言学习——关键字、标示符、注释、数据、常量、内存与变量

来源:互联网 发布:孔浩 java 编辑:程序博客网 时间:2024/06/05 01:41

-----------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -----------


一、 关键字

1.    什么是关键字

 关键字就是C语言提供的有特殊含义的符号,也叫做“保留字”

2.  C语言中的关键字

auto double int struct break else long switch

case enum register typedef char extern return union

const float short unsigned continue for signed void

default gotosizeofvolatiledoif while static

在最简单的C语言程序中

int main(){        return 0;}
int 和 return 就是关键字

3.    关键字的特征

1>  全部都是小写

2>  在开发工具或者智能文本编辑工具中会显示特殊颜色。默认情况下,C语言中的所有关键字在Xcode中都会显示紫褐色

二、   标识符

1.    什么是标识符

标识符就是在程序中编程者自定义的一些符号和名称。要跟关键字区分开来。

比如:函数名,变量名

2.    标识符的作用

作用:区分,将自己和别人区分开来,就像人类起名字一样

如: C语言是由函数构成的,一个C程序中可能会有多个函数,为了区分这些函数,就给每一个函数都起了个名称。函数的名称就是标识符的一种。除了函数,变量的名称也是标识符

3.    命名

1>  命名规则(一定要遵守)

   只能由26个英文字母的大小写10个阿拉伯数字0~9下划线_组成

   严格区分大小写,比如test和Test是2个不同的标识符

   不能以数字开头

   不可以使用关键字作为标识符

 

2>  命名规范(最好遵守)

   尽量起个有意义的名称,比如一个完整的英文单词,别人一看这个名称就能才能这个标识符的作用。如果不懂英文,你也可以用拼音,尽量不要起像abcde、sfsdfsdf等这类看起来没有意义的名称

   如果标识符中含有多个单词,可以使用驼峰标识(除开第一个单词,后面每个单词的首字母都是大写):firstName、myFirstName,或者使用下划线_来连接:first_name、my_first_name

 

4.    常见的标识符命名错误

合法标识符

非法标识符

注释

fromNo12

from#12

标识符中不能使用#符号

my_Boolean

my-Boolean

标识符中不能使用“-”符号,应使用下划线“_”代替

Obj2

2ndObj

标识符不能使用数字开头

myInt

int

“int”是内建关键字

jack_rose

jack&rose

符号“&”不能出现在标识符中

GUI

G.U.I

标识符内部需要出现“.”分隔符

 

三、   注释

1.    什么是注释

1)      注释是在所有计算机语言中都非常重要的一个概念,从字面上看,就是注解、解释的意思

2)      注释可以用来解释某一段程序或者某一行代码是什么意思,方便程序员之间的交流。假如我写完一行代码后,加上相应的注释,那么别人看到这   个注释就知道我的这行代码是做什么用的

3)      注释可以是任何文字,也就是说可以写中文

4)      在开发工具中注释一般是豆沙绿色

5)    在公司,注释非常重要,以便协同开发。 

2.    单行注释

格式:

如://这句话是个注释

注释范围:

只能注释一行,从 // 开始到这行的结尾都是注释的内容

编写注释个位置:

可以是任何位置,如:函数外面、里面,一般写在每一条语句后面,或者每条语句的上面一行 

3.    多行注释

格式:

/*

注释内容

*/


注意:多行注释不能嵌套多行注释,因为外面的多行注释会默认和里面的多行注释结尾*/结合

如:

/*

/*注释内容  */     // 注意上面是绿色,是注释内容

*/                       // 注意下面*/是黑色不再是注释内容

4.    注释的作用

1>  被注释的代码不会参与编译

   当编译程序的时候,并不会将注释编译到.o目标文件中。从.o文件的大小和.c文件的大小可以间接看出

2>  检查代码的作用

3>  排除错误

 

5.    注释的嵌套现象

1)      单行注释可以嵌套单行注释、多行注释

//哇哈哈 //呵呵呵

// /* fsdfsdf */  // sdfsdfsd

2)      多行注释可以嵌套单行注释

/*   
// 作者:MJ 
// 描述:第一个C语言程序
作用:这是一个主函数,C程序的入口点  
*/

3)      多行注释不能嵌套多行注释

/* 哈哈哈
  /*嘻嘻嘻*/
   呵呵呵 */

4)      下面的写法是错误

// /*  
哈哈哈
*/
 

6.    注释的重要性

l   要养成写注释的良好习惯。绝大部分项目经理检查下属代码的第一件事就是看有没有写注释,也有很多公司的机试也会检查注释(机试就是给你一道编程题、一台电脑,在规定时间内解题)
2   今天,你写了几百行代码,很高兴,做出了一个非常不错的功能,但是,忘了写注释。一个星期过后,你再回去看那一段代码,你可能完全看不懂了,这是很正常的事。如果你写了注释,那情况就不一样了,注释可以帮助你回顾代码的作用。
3   你在某家公司待了1年多,写了10几万行代码,但是你不写一点注释。有一天你离职了,新的员工接手你做的项目,他首先要做的事情肯定是要读懂你写 的代码。可是你一点注释都没写,10万行代码,全部都是英文,这会让这位新员工非常地蛋疼。每个人都有自己的思想,写代码的思路肯定是不一样的,看别人写 的代码是件非常痛苦的事情,特别是没有注释的代码。你不写注释的做法会大大降低公司的开发效率。因此,所有的正规公司都非常重视注释。
 

四、   数据

计算机是用来处理数据,程序就是处理数据的直观体现。我们面对计算机时时时刻刻在与里面数据打交道。
数据分为两类:一种静态,一种动态,动态是时刻改变可以互动的数据,静态数据是存储在硬盘里,动态数据是存储在内存条里,由计算机直接调用。

1B=8bit,1 KB = 1024 B,1MB = 1024 KB,1 GB = 1024 MB,1 TB = 1024 GB


C语言中的数据类型



 

五、   常量

1.    什么是常量

常量:表示一些固定类型 的数据

2.    常量的分类

1> 整型常量(int)

包括了所有的整数,比如6、27、109、256、-10、0、-289等

 

2> 浮点型常量(float\double)

浮点型常量分为double和float两种数据类型

double:双精度浮点型,其实就是小数。比如5.43、-2.3、0.0等(注意,0.0也算是个小数)

float:单精度浮点型,也是小数,比double的精确程度低,也就是说所能表示的小数位数比较少。为了跟double区分开来,float 型数据都是以f结尾的,比如5.43f、-2.3f、0.0f。需要注意的是,绝对不能有10f这样格式的,编译器会直接报错,只有小数才允许加上f。

 

3> 字符常量(char)

将一个数字(0~9)、英文字母(a~z、A~Z)或者 其他符号(+、-、!、?等)用单引号' '括起来,这样构成的就是字符常量。

比如'6'、'a'、'F'、'+'、'$'等。

注意:单引号只能括住1个字符,而且不能是中文字符(中文字符占两个字节),下面的写法是错误的:'abc''123456'''

 

4> 字符串常量

将一个或者多个字符用双引号("")括起来,这样构成的就是字符串常量。比如"6"、"男"、"哇哈"、"abcd"、"my_car4",其实printf("Hello World");语句中的"Hello World"就是字符串常量。


那究竟6'6'"6"在用法上有什么区别呢?这个先不作讨论,以后会介绍。

6是一个整数,也就是整型常量。‘6’是一个字符常量,占一个字节,用char 型变量进行存储。“6”是一个字符串常量,用char型数字进行存储。


0是整型常量、0.0是double类型常量


六、   内存与变量

1.什么是内存

内存就像是excel表里一个个的的小格子,每个格子是一个位(bit),每个bit都有他自己的的位置,也就有自己的标识,叫内存地址值。
内存地址值,·是由十六进制数来代表,如:0xffc1
内存是以字节为单位(byte)
1byte=8bit
不同类型的数据所占的字节数也不同。

2.    变量的存储



3.存储细节剖析

如:

char  a='b', b='34';

1>先在计算机内存中寻找一片空白区域

2>以地址值由大到小的方向分配内存。也就是内存由大到小寻址。优先分配内存地址较大的字节给变量

所以:a的内存地址比b大

3> 每个变量都有地址:第一个字节的地址就是变量的地址

则a的地址值为0xcffcd08、b的地址值为0xcffcd00

4>  查看内存地址:

int a;

printf("a的地址是:%p\n",&a);

4.什么是变量

一段内存空间,用来存储我们的数据 

5.定义变量

1>  格式

变量类型 变量名;

比如int num;

   变量名属于标识符

   不同类型的变量占用不同大小的存储空间。内存极其有限,分配适当的存储空间

   数据类型来约束变量(方便运算)


2>  注意

在变量未经初始化之前,不要尝试使用变量的值

int a;

printf("a的值是:%d\n", a);

上面的写法是不建议

 

6.    常见错误

1>  变量名相同  int a = 10int a =12;

2>  变量的作用域不对

  变量的创建和释放过程

  代码块作用域 {  int a = 10; }

 

#include <stdio.h>/* 1.作用域(作用范围)  从定义变量的那行代码开始,一直到函数结束  不同函数里的变量就算名字是一样,但是!他们的实质的不同的,是不同变量 */int test(){    int score = 200;    return 0;}int main(){    int score;        test();//test 中所定义的 score 与main中的是不同的,并且在test函数这个语句运行完,test里的score变量就自动释放消失        score = 100;            printf("score=%d\n", score);//结果为        /*     错误写法    int b;    b = a;    不可以将一个未初始化的变量赋值给另一变量,其实呢,是有结果的 只是个不确定的结果    */    }

#include <stdio.h>/* 2.代码块的作用 及时回收不再使用的变量,为了提升性能 */int main(){    {        double height = 1.55;                height = height + 1;                printf("height=%f\n", height);    }//运行完height这个变量会自动消失    /*     {     int a = 10;     }         printf("a=%d\n", a);//报错: error: use of undeclared identifier 'a'                        //printf("a=%d\n", a);                        //                 ^                        //上面括号里的变量a在大括号结束时,即 释放,消失了,所以本行调用的a是不存在的*/        return 0;}

#include <stdio.h>int main(){    int a = 20;    int score = a + 100;    printf("%d\n", score);//结果为120        {        int score = 50;//是这个模块里的变量,与上个score无关        {            score = 10;//搜索这个模块里没有score变量,向上一级大括号搜索            printf("%d\n", score);//结果为10        }        a = 10;//搜索这个模块里没有a变量,向上一级大括号搜索,将最初的a变量赋值为10    }        {        score = a + 250;//将上一级score(最初)赋值a + 250 a为10  结果为260        int score = 30;//这个score为本模块变量        printf("%d", score);//输出本模块score变量,结果为30    }        printf("%d\n", score);//结果为260    return 0;}

7.  变量的作用域图解

int main()

{

             int a = 2;

                 {

                           a = 3;

                 }

}

内存图解:



8.    习题

 交换整型变量a、b的值。比如a=10、b=11;交换之后a的值是11,b的值是10。

1> 使用第三方变量

int temp;

temp = a;

a = b;

b = temp;

2> 不使用第三方变量

a = b - a;

b = b - a;

a = b + a;

a = a + b;

b = a - b;

a = a - b;

a = a ^ b;

b = a ^ b;

a = a ^ b;

int a = 10, b = 11;

printf("a = %d, b = %d\n",b, a);


-----------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -----------

0 0
原创粉丝点击