您的位置:首页 > 编程语言 > C语言/C++

iOS学习第二天,C语言知识学习

2016-01-08 18:18 239 查看
# 标识符

##本小节知识点:

1. 什么是标识符

2. 标识符的作用

3. 标识符命名规则(必须遵守)

##1.什么是标示符

- 标识符就是程序员自己在程序中起的一些名字。

+程序员自己起的名字,不能使用和关键字同名的名字。

##2. 标识符的作用

- 标识符,从字面上理解就是用来标识某些东西的符号,标识的目的就是为了将这些东西区分开来

- 标识符的作用跟人类的名字差不多,为了区分每个人,就在每个人出生的时候起了个名字

- C语言是由函数构成的,一个C程序中可能会有多个函数,为了区分这些函数,就给每一个函数都起了个名称。函数的名称就是标识符的一种。除了函数,以后还会学到“变量”这个概念,变量的名称也是标识符

##3.标识符命名规则

- 1.只能由26个英文字母的大小写、10个阿拉伯数字0~9、下划线_组成(现在也可以用$组成)

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

- 3.不能以数字开头

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

##1.标识符命名规范

- 命名规范:

+起一个有意义名字,能够提高代码的可读性

##2.标示符命名规范详述

- 驼峰命名法(Camel-Case)是电脑程序编写时的一套命名规则(惯例):

+程序员们为了自己的代码能更容易的在同行之间交流,所以才取统一的可读性比较好的命名方式。

* 例如:有些程序员喜欢全部小写,有些程序员喜欢用下划线,所以如果要写一个my name的变量,他们常用的写法会有myname、my_name、MyName或者myName。这样的命名规则不适合所有程序员阅读,而利用驼峰命名法来表示,可以增加程序可读性。

+驼峰命名法就是当变量名或函数名是由一个或多个单字连结在一起,而构成的唯一识别字时,第一个单字以小写字母开始,第二个单字的首字母大写;或每一个单字的首字母都采用大写字母

* 例如:myFirstName、myLastName,这样的变量名看上去就像骆驼峰一样此起彼伏,故得名。

+驼峰命名法(Camel-Case)一词来自 Perl 语言中普遍使用的大小写混合格式,

驼峰命名法的命名规则可视为一种惯例,并无绝对与强制,为的是增加识别和可读性。

#3.其它标识符命名规范

- 命名应当直观且可以拼读,要望文知意,便于记忆和阅读。

+标识符最好采用英文单词或其组合,不允许使用拼音。程序中的英文单词一般不要太复杂, 用词应当准确。

- 命名的长度应当符合“min-length&& max-information”原则。

+C是一种简洁的语言, 命名也应该是简洁的。例如变量名MaxVal 就比 MaxValueUntilOverflow 好用。标识符的长度一般不要过长,较长的单词可通过去掉“元音”形成缩写。

+另外,英文词尽量不缩写,特别是非常用专业名词,如果有缩写,在同一系统中对同一单词必须使用相同的表示法,并且注明其意思。

+大多数ANSI编译程序允许有至多31个有效字符。也就是说,只有变量名或函数名的前31个字符的唯一性会被检查,其余的字符将被忽略掉。

- 当标识符由多个词组成时,建议采用“驼峰命名法”。

+比如:int CurrentVal;这样的名字看起来比较清晰,远比一长串字符好得多。

- 尽量避免名字中出现数字编号,如Value1,Value2等,除非逻辑上的确需要编号。

+比如驱动开发时为管脚命名,非编号名字反而不好。初学者总是喜欢用带编号的变量名或函数名,这样子看上去很简单方便,但其实是一颗颗定时炸弹。

- 对在多个文件之间共同使用的全局变量或函数要加范围限定符

+(建议使用模块名(缩写)作为范围限定符)。(GUI_ ,etc)标识符的命名规则

- 标识符名分为两部分:规范标识符前缀(后缀) + 含义标识。

+ 非全局变量可以不用使用范围限定符前缀。

# 注释基本概念

1.什么是注释

2.为什么要使用注释?

3. 【应用注释的目的和应用场景

4.注释的特点

##1.什么是注释

- 注释,从字面上看,就是注解、解释的意思

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

- 注释可以是任何文字

- 在开发工具中注释一般是绿色

> 温馨提示:

>+ 初学者编写程序可以养成习惯:先写注释再写代码。

>+ 将自己的思想通过注释先整理出来,在用代码去体现。

##2.为什么要使用注释?

>+解释代码

>+做函数说明

>+作思路分析

##3.应用注释的目的和应用场景

- 常见用法一(解释代码):

-(UIBarButtonItem *)initWithNorImage:(NSString *)norimage higImage:(NSString*)higImage title:(NSString *)title target:(id)target action:(SEL)action

{

// 1.创建一个按钮

UIButton *btn = [[UIButton alloc] init];

// 2.设置按钮的默认图片和高亮图片

if (norimage != nil &&

![norimageisEqualToString:@""]) {

// 图片不为空

[btn setImage:[UIImage imageNamed:norimage] forState:UIControlStateNormal];

}

if (higImage != nil &&

![higImageisEqualToString:@""]) {

// 图片不为空

[btn setImage:[UIImageimageNamed:higImage] forState:UIControlStateHighlighted];

}

// 设置标题

[btn setTitle:titleforState:UIControlStateNormal];

// 3.监听按钮的点击事件

[btn addTarget:target action:actionforControlEvents:UIControlEventTouchUpInside];

// 4.设置按钮的frame

// 可以调用控件的sizeToFit方法来自动调整控件的大小

[btn sizeToFit];

// 5.根据按钮创建BarButtonItem

return [[UIBarButtonItem alloc]initWithCustomView:btn];

}

```

- 常见用法二(做函数说明):

* 创建item

* @param norimage 默认状态的图片

* @param higImage 高亮状态的图片

* @param title 标题

* @return 创建好的item

- 常见用法三(做思路分析):

##4.注释的特点

- 注释是写给人看的,不是给计算机看的。因此当编译程序的时候,并不会将注释编译到.o目标文件中

- 从.o文件的大小可以间接看出注释后的代码并没有被编译

- 检查代码的作用

- 排除错误

# 注释的使用

1.单行注释

2.多行注释

3.注释使用注意

##1.单行注释

- // 进行单行注释

+ 使用范围:任何地方都可以写注释:函数外面、里面,每一条语句后面

+ 作用范围: 从第二个斜线到这一行末尾

+ 快捷键:Command+/

##2.多行注释

- /* */ 进行多行注释

+ 使用范围:任何地方都可以:函数外面、里面,每一条语句后面

+ 作用范围: 从第一个 /* 到最近的一个 */

##3.注释使用嵌套

- 1.单行注释可以嵌套单行注释、多行注释

// 小明 // 小红

// /* 校长 */

// 帅哥

- 2.多行注释可以嵌套单行注释

/*

// 作者:张三

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

*/

- 3.多行注释不能嵌套多行注释

/* 哈哈哈

/*嘻嘻嘻*/

呵呵呵 */

# 数据及数据类型

1.什么是数据?

2.数据类型

3. C语言数据类型概述

##1.什么是数据?

- 生活中时时刻刻都在跟数据打交道,比如体重、血压、股价等。在我们使用计算机的过程中,会接触到各种各样的数据,有文档数据、图片数据、视频数据,还有聊QQ时产生的文字数据、用迅雷下载的文件数据等。

##2.数据类型

- 数据的分类

+ 静态的数据

+ 动态的数据

- 静态的数据

+ 概念:静态数据是指一些永久性的数据,一般存储在硬盘中。硬盘的存储空间一般都比较大,现在普通计算机的硬盘都有500G左右,因此硬盘中可以存放一些比较大的文件。

+ 存储的时长:计算机关闭之后再开启,这些数据依旧还在,只要你不主动删掉或者硬盘没坏,这些数据永远都在

+ 哪些是静态数据:静态数据一般是以文件的形式存储在硬盘上,比如文档、照片、视频等。

- 动态的数据

+ 概念:动态数据指在程序运行过程中,动态产生的临时数据,一般存储在内存中。内存的存储空间一般都比较小,现在普通计算机的内存只有8G左右,因此要谨慎使用内存,不要占用太多的内存空间。

+ 存储的时长:计算机关闭之后,这些临时数据就会被清除。

+ 哪些是动态数据:当运行某个程序(软件)时,整个程序就会被加载到内存中,在程序运行过程中,会产生各种各样的临时数据,这些临时数据都是存储在内存中的。当程序停止运行或者计算机被强制关闭时,这个程序产生的所有临时数据都会被清除。

+ 你可能会问:既然硬盘的存储空间这么大,为何不把所有的应用程序加载到硬盘中去执行呢?有个主要原因是内存的访问速度比硬盘快N倍。

- 静态数据和动态数据的相互转换

+ 静态数据到动态数据(也就是从磁盘加载到内存。)

+ 动态数据和静态数据的相互转换

* 如手机拍照片存储到手机的硬盘上

- 数据的计量单位

+ 不管是静态还是动态数据,都是0和1组成的。0和1如何组成这么多的数据?

+ 数据都有大小,静态数据就会占用硬盘的空间,动态数据就占用内存的空间

+ 数据越大,包含的0和1就越多.

比特位和字节

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

1 KB(KByte) =1024 B

1 MB = 1024 KB

1 GB = 1024 MB

1 TB = 1024 GB

##3.C语言数据类型概述

- 作为程序员, 最关心的是内存中的动态数据,因为我们写的程序就是在内存中的

- 程序在运行过程中会产生各种各样的临时数据, 为了方便数据的运算和操作, C语言对这些数据进行了分类, 提供了丰富的数据类型

- C语言中有4大类数据类型:基本类型、构造类型、指针类型、空类型

+ 常见的数据类型有:int、float、double、char

+ 整型:用于准确地表示整数,根据表示范围的不同分为以下三种:

* 短整型(short) < 整型(int) < 长整型(long)

+ 实型(浮点型):用于标识实数(小数)根据范围和精度不同分为以下两种:

*单精度浮点数(float) < 双精度浮点数(double)

* 注意:float只能够保证7位数字是有效的!!!

+ 字符型:用来描述单个字符,char

# Scanf函数注意事项

##1.scanf使用注意事项

- 如果在输入时,输入了多个空格、回车、Tab都会被系统忽略的

- 如果要获取的内容是多个整数,中间输入多个空格、回车、Tab都会被系统忽略

- 如果要获取的内容是多个实型,中间输入多个空格、回车、Tab都会被系统忽略

- 非法的格式输入,得不到想要的结果

- 混合整形和字符型数据接收

+当整形的数和字符混合输入时,要避免“空格”的错误输入带来的麻烦

+为防止混合输入空格造成的错误,可通过添加普通的分隔符解决,如:逗号

- 关于使用"\n"的问题

+scanf函数当遇到回车的时候,会结束执行

+所以在scanf中,尽量不要使用 \n

+ 如果在scanf中使用了\n,
需要原样输入"\n"


#Scanf函数实现原理

##1.scanf的运行原理

- 系统会将用户输入的内容了放入输入缓冲区

- scanf方式会从输入缓冲区中逐个取出内容赋值给格式符, 如果类型不一致不会修改原有数据

- 如果输入缓冲区的内容不为空,scanf会一直从缓冲区中获取,而不要求再次输入

补充:如果原来输入错误,输入缓冲区内有内容,使用rewind(stdin)函数可以清空缓存,再继续输入.

# printf函数注意事项

##1.域宽问题

- %d:按整型数据的实际长度输出。如果想输出指定宽度可以指定域宽

- %md-->m域宽,打印出来以后,在控制台上,显示m位

+如果我们要打印的数的位数如果超过我们设定m 则原样输出

+如果我们要打印的数的位数如果小于我们设定的位数,则补空白,具体如下:

+如果m为正数,则左对齐(左侧补空白)

+**如果m为负数,则右对齐(右侧补空白)

// 如果m为负数,则右对齐(右侧补空白)

printf("|%-5d|",88);

输出结果:|88 |

// 如果m为正数,则左对齐(左侧补空白)

printf("|%5d|",88);

输出结果:| 88|

// %0md 表示,位数不足部分补“0”

printf("|%05d|",88);

输出结果:|00088|

常用于日期, 图片处理等

##2.转义字符问题

- 如果想输出字符"%",则应该在“格式控制”字符串中用连续两个%表示

printf("%f%%", 1.0/3);

输出结果: 0.333333%。

\n 换行,相当于敲一下回车。

\t 跳到下一个tab位置,相当于按一下键盘上的tab键。 \b 退格,相当于按一下backspace。

\r 使光标回到本行开头。

\f 换页,光标移到到下页开头。

\\ 输出\字符,也就是在屏幕上显示一个\字符。

\' 输出'字符,也就是在屏幕上显示一个'字符。

\" 输出"字符,也就是在屏幕上显示一个"字符

# 常量基本概念

##1.什么是常量?

- 常量,表示一些固定的数据,也就是不能改变的数据

##2.常量分类

- 整型常量,也就是整常数。

+ 二进制

+ 十进制

+ 八进制

+ 十六进制

- 实型常量。

+ 单精度

+ 双精度

- 字符型常量:用' '(单引号)括起来的

+ 普通字符

+ 转义字符

- 字符串常量。

+ 将一个或者多个字符用双引号("")括起来,这样构成的就是字符串常量。

+ 注意字符串常量和字符型常量是不一样的。

# 不同类型常量的表示方法

##1.整型常量

- 整型常量可以用三种样子:

+ 十进制整数。如356,-120,0。

+ 八进制整数。八进制形式的常量都以0开头,如0123,也就是十进制的83; -011,也就是十进制的-9。

+ 十六进制整数。十六进制的常量都是以0x开头,如0x123,就是十进制的291。

+ 二进制整数。逢二进一 0b开头

##2.实型常量

- 实型常量又分两种:

+ 单精度小数:以f结尾

+ 双精度小数:十进制小数形式。注意: 0.0也是实型常量。

实型的另一种表示形式:

+ 指数形式。大家都应该知道应该知道科学计数法,指数形式的常量就是科学计数法的另一种表示,比如123000,用科学计数法表示为1.23×10的5次方,用C语言表示就是1.23e5或1.23E5,注意e或E的前面必须要有数字,而且e或E后面的数字一定要是整数。

##3.字符常量

- 字符型常量都是用''(单引号)括起来的,其表现形式可以有两种:

+ 一般形式。一个字符用''括起来,注意:只能有一个字符。

+ 特殊形式。特殊形式都是以\开头,它们在屏幕上不会直接显示出来,而是根据其特定的功能来显示的,这些特殊字符常量有:

\n 换行,相当于敲一下回车。

\t 跳到下一个tab位置,相当于按一下键盘上的tab键。

\b 退格,相当于按一下backspace。

\r 回车。

\f 换页,光标移到到下页开头。

\\ 输出\字符,也就是在屏幕上显示一个\字符。

\' 输出'字符,也就是在屏幕上显示一个'字符。

\" 输出"字符,也就是在屏幕上显示一个"字符。

\ddd 1位到3位八进制数表示的字符。

例如:使用'\376',则在屏幕上显示一个黑色的方块。 \xhh 1位到2位十六进制数表示的字符。注意x不能丢了

##4.字符串常量

- 字符串常量与字符常量不同的地方是,字符串常量是用""把字符串括起来,所以'a'和"a"是不一样的,而且系统会在字符串常量的末尾自动加一个字符串结束标志('\0')。

##5.自定义常量

- 格式: const 数据类型 常量名称 = 值

+ 例如: const int NUM =998;

# 变量基本概念

##1.什么是变量?

- 表示的数据是可以经常修改的。当一个数据的值需要经常改变或者不确定时,就应该用变量来表示。

+例如:游戏积分

+例如:你去超市,放东西到储物柜的一格,他会给你一张纸条,你根据这个纸条才可以拿回自己的东西,储物柜的一格就是变量的内存空间,字条就是变量名,你拿和放就是修改变量名对应内存中的数据

+变量分为全局变量,局部变量。全局变量定义在函数外部,程序开始到结束都一直在,而局部变量定义在函数内部,只能供函数使用,在函数内部有效;

##2.如何定义变量

- 定义变量(声明), 任何变量在使用之前,必须先进行定义。

- 定义变量的目的:在内存中分配一块存储空间给变量,方便以后存储数据。

- 如果定义了多个变量,就会为这多个变量分别分配不同的存储空间。

+**格式1: 变量类型变量名称 ;

int a;

float b;

char ch;

+**格式2:变量类型变量名称,变量名称;**

+连续定义, 多个变量之间用逗号(,)号隔开

int a,b;

int a,b,c,d;

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

- 变量明的命名的规范

- 变量名属于标识符,所以必须严格遵守标识符的命名原则

- 变量名要尽可能的望文知意、简洁

# 变量初始化和引用

##1.如何使用变量?

- 赋值就是往变量里面存放东西。赋值语句后带个分号;

int value;

value = 998; // 赋值

>+ 注意:这里的等号=,并不是数学中的“相等”,而是C语言中的赋值运算符,作用是将右边的常量998赋值给左边的变量value

>+ (1)赋值的时候, = 号的左侧必须是变量(10=b,错误)

>+ (2)规范:习惯将 = 的两侧各加上一个 空格

##2.变量的初始化

- 变量第一次赋值,可以称为“初始化”

- 初始化的两种形式

+先定义,后初始化

int value;

value = 998; // 初始化

+定义的同时进行初始化

int a = 10; // 完全初始化

int a, b=10; //部分初始化

int a=4, b=2; // 完全初始化

+其它表现形式

* 批量初始化

int a,b,c;

a = b =c =0;

+思考: 不初始化里面存储什么?

int a; //不会报错,a里面存的内容:

1)随机数

2)上次程序分配的存储空间,存数一些内容,“垃圾”

3)系统正在用的一些数据

##3.如何修改变量值?

- 可以修改变量的值,多次赋值。每次赋值都会覆盖原来的值

int i = 10;

i = 20; // 修改变量值

##4.变量之间的值传递

- 可以将一个变量的值赋值给另一个变量

inta = 10;

intb = a;

- 连续赋值

int a,b,c;

a = b =c =0;

##5.如何查看变量的值?

- 使用printf输出一个/多个变量的值

int a = 10, c = 11;

printf("a=%d, c=%d", a, c);

- double\float\char的输出,格式符的一些小技巧

double height = 1.75;

char blood = 'A';

printf("height=%.2f, 血型是%c",height, blood);

# 变量的作用域

##1.变量的作用域

- C语言中所有变量都有自己的作用域,申明变量的类型不同,其作用域也不同。C语言中的变量,按照作用域的范围可分为两种,即局部变量和全局变量。

##2.局部变量

- 局部变量也称为内部变量。局部变量是在函数内作定义说明的。其作用域仅限于函数内(代码块), 离开该函数后再使用这种变量是非法的。

+例如:

int main(){

int i = 998; // 作用域开始

return 0;

}// 作用域结束

```

int main(){

{

int i = 998; // 作用域开始

}// 作用域结束

return 0;

}

```

int main(){

{

{

int i = 998;// 作用域开始

}// 作用域结束

}

return 0;

}

```

- 作用域补充说明:

+主函数中定义的变量也只能在主函数中使用,不能在其它函数中使用。同时主函数中也不能使用其它函数中定义的变量。因为主函数也是一个函数,它与其它函数是平行关系。

+形参变量是属于被调函数的局部变量,实参变量是属于主调函数的局部变量。

+允许在不同的函数中使用相同的变量名,它们代表不同的对象,分配不同的单元,互不干扰,也不会发生混淆。虽然允许在不同的函数中使用相同的变量名,但是为了使程序明了易懂,不提倡在不同的函数中使用相同的变量名。

##3.全局变量

- 全局变量也称为外部变量,它是在函数外部定义的变量。

##4.常见错误

- 变量名相同

int a = 10; int a = 12;

- 变量的作用域不对

- 变量的创建和释放过程

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

# 变量内存分析

##1.字节和地址

- 为了更好地理解变量在内存中的存储细节,先来认识一下内存中的“字节”和“地址”。

- 内存以“字节为单位”

##2.变量的存储

- 一个变量所占用的存储空间,不仅跟变量类型有关,而且还跟编译器环境有关系。同一种类型的变量,在不同编译器环境下所占用的存储空间也是不一样的

+ 所占用字节数跟类型有关,跟编译器环境也有关

+内存由大到小寻址

+变量存储单元的第一个字节的地址就是该变量的地址

+ 任何变量在内存中都是以二进制的形式存储。一个负数的二进制形式,就是对它的正数的二进制形式进行取反后再+1。(取反的意思就是0变1、1变0)

|类型|16位编译器|32位编译器|64位编译器|

|---------|----------------|---------------|-----------------|

|char | 1 | 1 | 1 |

|int | 2 | 4 | 4 |

|float | 4 | 4 | 4 |

|double | 8 | 8 | 8 |

|short | 2 | 2 | 2 |

|long | 4 | 4 | 8 |

|long long| 8 | 8 | 8 |

|void* | 2 | 4 | 8 |

##3.取值范围

- 不同数据类型所占的存储空间是不一样的,字节长度不一样,包含的二进制位数就不一样,能表示的数据范围也就不一样

- 如果赋值的时候超出了变量的取值范围,那么将损失精度,得到“垃圾数据”(“垃圾数据”就是指并非我们想要的数据)

|关键字 |所占字节数| 表示范围 |

|---------------------|----------------|-----------------|

| int | 4 |-2(31) ~ 2(31)-1|

|signed short int| 2 |-2(15) ~ 2(15)-1|

|signed long int| 4 |-2(31) ~ 2(31)-1|

| unsigned int | 4 |0 ~ 2(32)-1|

|unsigned short int| 2 |0~ 2(16)-1|

|unsigned long int| 4 |0~ 2(32)-1|

| float | 4 |绝对值E-37 ~E+38|

| double | 8 |绝对值E-307 ~E+308|
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: