C语言注意点汇总
- 计算机的一切源头都是0和1,其中0:断电,1:有电。
- 计算机语言发展史:机器语言--汇编语言--高级语言。机器语言0、1直接对硬件起作用。汇编语言,给机器语言添加了一些符号,使其更易于让人理解、记忆。高级语言,非常接近自然语言,简单易用,易于理解,但执行效率略低。
- C语言发展历史:BCPL语言---B语言---C语言---C++。1989年,C语言被美国国家标准局部ANSI制定出来C语言标准:ANSIC。1999年,ISO(国际标准总局)推出了C语言标准:C99。2011年,ISO推出了C语言新标准C11;
- C语言程序一启动就会执行一个叫做main的函数,main()前的返回值类型int可省略,因为默认返回int类型。()不可省略,因为()是函数的标志。
- 一个程序中有且只可有1个main()函数。
- 面试题:程序运行的步骤:编译---链接---运行。
- C语言中 ; 的作用是:告诉编译器,这一条语句我写完了。还要注意,除了""中及注释中的字符,其他地方的都必须是英文符号。
- 注释内容是不参与编译的。
- OC完全兼容C,Swift完全兼容OC。但swift不兼容C。
- 作用域:即起作用的范围。说白了就是管辖范围。
- 链接的是后才检查有无main()函数,编译时只检查有无语法错误。
- C语言中的关键字是被C语言赋予了特殊含义的单词。注意:关键字不能作为变量名、函数名,main不是关键字。程序员自己写代码用的叫做标识符,如自定义变量名、函数名。
- 标识符命名规则:(规则是必须遵守的,规范最好遵守)1>标识符只能由26个英文字母、10个数字、下划线_及美元$组成。2>标识符严格区分大小写。3>标识符不能以数字开头。4>标识符不能使用关键字作为标识符。
- 基本数据类型之间的赋值都是值传递。
- 默认情况下,编写的小数都是double类型;
- 同一范围没不能出现同名的变量。
- 注意:同一程序中尽量不要出现同名的变量。因为iOS开发中,Xcode7之后,会全局搜索变量。
- Mac OS、iOS都是64位系统。
- 变量内存分析:1>一个变量占用的存储空间不仅和变量数据类型有关,还和编译器位数有关。2>内存分配地址、寻址,是从大到小进行。即先定义的变量内存地址一般大于后定义的变量的内存地址。
- 用scanf函数给某个变量赋值的时候,一定要注意取地址符&的运用。否则,会出错。
- 特别注意:scanf中,千万不要在scanf格式的结尾加\n。因为\n是scanf的结束符号。如果不小心这么干了,那么把\n原样输出即可。
- scanf使用时,最好用逗号,来分隔。
- scanf使用时,如果输入的数据与格式化字符串中的不匹配,那么scanf函数会自动停止。
- scanf(),空格、回车、table遇到非char类型时会自动被忽略。
- scanf使用时,如果格式中没有%c时,多个数据之间没有其他分隔字符,那么可以用空格、回车、table来作为分隔。有%c时,除外。
- 当连续使用scanf()函数时,要注意清空缓存区中的内容,这是由scanf()输入原理造成的。getchar()是专门用来获取字符,会从输入缓冲区中获取。
- iOS开发中,折叠代码快捷键:command + option + ←或→。
- 清理Xcode缓存的方法:Product→Clean,或shift + command + K;
- ÷ 属于中文符号,/ 属于英文符号。
- %号输出时,用%%
- 1>函数体内部不能定义和形参同名的变量。2>一个函数可以没有形参,也可以有无数个形参3>void表示函数没有返回值,4>如果没有明确说明返回值类型,则默认是返回int类型;5>由于C语言是弱语法,就算明确了返回值类型,也可以不返回任何值。6>C语言中,不管参数个数、类型是否相同,函数名一定不可以重复。7>函数不可重复定义,但可以重复声明。8>如果有函数的声明,没有此函数的定义,则编译可通过,但链接报错。因为编译器编译时只检查语法合不合理,并不检查函数有没有定义。而链接的时候,才检查函数是否有定义。
- 特别注意:sizeof()是运算符,而不是函数。
- 逗号运算符的运算结果,最后一个表达式的结果。
- 如果char a = 'a';则sizeof(a)= 1...sizeof('a')=4
- 三目运算符:表达式?结果1:结果2;其优先级低于算术运算符和关系运算符;其结合方向是:从右到左。
- 所有的数字都具有真假性。0为假,非0为真。
- 所有的字母都具有数字性。
- 编程中,-1一般用来表示结果不正确。
- 产生随机数的函数是:arcrandom_uniform(N)会产生0~N-1之间的一个随机整数。
- 在swift中,switch功能远远强大于if。故必须好好学switch;1>在switch中,如果有一个case满足了条件,那么其他所有的case和default条件都不再进行判断,知道遇到break或执行到switch对应的大括号时结束。2>switch中的条件表达式必须返回整数的表达式,也就是说,()中只能放整数或返回转换为整数的类型,如char类型的也可以。3>case后的值不能重复。4>case后面的值也只能放返回整数的表达式或整数或者能够转换为整数的类型;5>case后面不能放变量。因为系统在编译时就会先对switch中所有的case进行优化。即先根据case后面的常量值,生成一张取值表。6>无论default写到switch中什么地方,它都先判断case值,只有所有case值都不满足时才会最后执行default。7>同1,执行default时,其它所有case都失效。
- 在swift中,条件表达是可以不是整型。这也是swift中switch功能远远强大的表现之一。
- 循环重点关注:1>循环体 2>循环条件。用循环优先选择for循环。
- 如果在循环体中定义局部变量,则其作用域是从定义地方开始,一直到循环体结束,且每次进入循环体都会重新定义一个该变量。
- 让C语言发出声音:#include<stdlib.h> system("say 要说的话");
- 循环嵌套:外层循环管行数,内层循环管列数。
- 循环嵌套:尖尖朝上,修改内层循环:条件表达式;尖尖朝下,修改内层循环:初始化表达式;
- 数组中元素是按内存从小到大排列的。而多个数组之间,先定义的数组地址值更大,按从打到小寻址。
- 数组当做函数参数时,会当做指针变量来使用。在64bit编译器环境下,指针变量所占的字节数永远是8个字节。
- 在C、OC中,函数内不能定义其他函数;在swift中,函数内可以定义其他函数。
- 1>基本数据类型(char、int、double、float)作为函数的参数,在函数中修改形参的值,不会影响到外面实参的值。2>实参的个数必须和形参的个数相同3>返回值可以和返回值类型不同。不建议这么做。当返回值和返回值类型不一样时,系统将自动将返回值进行自动类型转换。将返回的值转换为返回值类型。3>函数可以有形参,也可以没有形参。5>函数可以有返回值,也可以没有返回值。如果没有返回值,那么返回值类型就写void。如果函数没有返回值,那么可以不写return,但是如果写了return,也不会报错。6>函数名一定不可重名,不管参数同于不同。7>因为C是弱语法,所以函数可以没有返回值类型。
- 函数可以声明在其他函数之内,也可以声明在其他函数之外,但必须声明在调用之前。
- 函数的实现必须在其他函数(包括main()函数)之外。
- 只要调用一个函数,就要在内存中为其开辟一块内存空间。
- 递归函数要注意:1>结束条件 2>规律 3>格式(函数内,上来先写一个if-else,if的条件即递归结束条件,else内部即规律。)
- printf()函数是有返回值得,返回值类型为int类型。
- C语言中,只要定义了变量,系统就会为其开辟一块存储空间,让其存储数据。内存寻址是从大到小,故对变量而言越先定义的变量,内存地址越大。
- 在C语言中,数据不看怎么存,只看怎么取值。
- 对char类型的,只要存储的不超过char类型的取值范围,那么,可以用char类型来代替int类型。
- C语言规定,字符串必须以\0结尾,来作为字符串的结束符号。所以字符串变量的元素的个数比字符数组的元素多了一个\0。即字符串变量和普通的字符数组是有一定的区别的。
- %s原理:从传入的地址开始逐个输出,直至遇到\0
- 1>C语言中,凡字符串必须以\0结尾,只要没有\0就不认为是字符串。2>只要""括起来的,都是字符串,最后结尾自动有\0 .3>C语言字符串的本质就是数组
- 不管几级指针,只要是地址,在64位编译器下,永远是8个字节。
- 在iOS开发过程中,2级及更多级指针几乎用不到。
- 对结构体类型不能进行初始化,也不能对结构体类型中的内部组成变量进行初始化。只能对该结构体类型定义出来的变量进行初始化,这一点要注意。
- 注意:结构体作为函数参数进行数据传递时,是值传递。
- 定义枚举类型的规范:1>枚举类型的取值一般以k开头,且后面跟上枚举类型的名称,再跟上当前枚举值;2>枚举类型的首字母大写
- const关键字是一个类型修饰符,表示readonly,只读。说白了就是,说明一个常量的作用。
- const的位置有两种:写在类型左边,写在类型右边。
注意:const修饰指针类型的变量时,要注意区分const的位置。
例如:const char * name;
char const * name;
char * const name;
注:const写在*号的左边,表示指针指向变量的值不可变。
const写在*号的右边,表示指针的指向不可变。
C语言注意点汇总的更多相关文章
- C语言面试题汇总之一
C语言面试题汇总之一 1.static有什么用途?(请至少说明两种) l 限制变量的作用域: 设置变量的存储域. 2.引用和指针有什么区别? 引用必须被初始化,指针不必: 引用初始化以后不能被改变,指 ...
- Golang 入门系列(三)Go语言基础知识汇总
前面已经了 Go 环境的配置和初学Go时,容易遇到的坑,大家可以请查看前面的文章 https://www.cnblogs.com/zhangweizhong/category/1275863.html ...
- R语言常用包汇总
转载于:https://blog.csdn.net/sinat_26917383/article/details/50651464?locationNum=2&fps=1 一.一些函数包大汇总 ...
- 统计计算与R语言的资料汇总(截止2016年12月)
本文在Creative Commons许可证下发布. 在fedora Linux上断断续续使用R语言过了9年后,发现R语言在国内用的人逐渐多了起来.由于工作原因,直到今年暑假一个赴京工作的机会与一位统 ...
- Go语言学习资料汇总
网站: Go语言官网(访问)(中文镜像) Go语言中文网(访问) Go编译器(访问) Go语言中国社区(访问) golanghome(访问) GoLang中国(访问) Gopher Academic( ...
- C语言基础知识汇总
c语言执行步骤: 一.编辑程序 1.编写c语言的代码,保存在扩展名.c的文件中,源文件. 2.编写代码有三种方式: a.vi命令方式系统自带 b.ultraedit网络下载 c.xcode网络下载 二 ...
- C语言面试题汇总
1. 阅读下面程序并写出输出结果(10分). main() { int a[5]={1,2,3,4,5}; int *ptr=(int *)(&a+1); printf("%d, ...
- python语言基础问题汇总
问题汇总 问题分类 怎么在一个python脚本里调用另一个python脚本 把两个脚本filea.py 和 fileb.py 放在同一个目录下,然后在filea.py的开头写: import file ...
- C语言出错问题汇总【需要更新】
'getch' : undeclared identifier解决方案 在VC++6.0中编译程序 #include<stdio.h> void main() { printf(&qu ...
随机推荐
- invalid END header解决方法
我在Windows上的eclipse开发了一个java web项目,然后压缩成war包,通过ftp发送到Linux服务器上,Tomcat先shutdown,再startup.按理说,会在webapps ...
- c++课设学生成绩与学籍管理系统
题目要求(手打,累):设计一个类CStudent,类中包含一个学生的基本数据如下: 编号,姓名,性别,年龄,数学成绩,计算机成绩,外语成绩. 并假设编号为整数,且从1号往后连续编码:姓名为字符串,性别 ...
- wmi uuid
[转]https://www.cnblogs.com/-sylar/p/8376621.html 1. 开始-运行-输入:wbemtest 回车2. 单击"连接", 输入:root ...
- error C4996: 'GetVersionExW': 被声明为已否决
1.Project Properties > Configuration Properties > C/C++ > General > SDL checks关掉 其他方法:2. ...
- [SoapUI] 在SoapUI中通过Groovy脚本执行window命令杀掉进程
//杀Excel进程 String line def p = "taskkill /F /IM EXCEL.exe".execute() def bri = new Buffere ...
- Spring IOC(六)依赖查找
Spring IOC(六)依赖查找 Spring 系列目录(https://www.cnblogs.com/binarylei/p/10198698.html) Spring BeanFactory ...
- maven项目springmvc导包失败-JsonProcessingException
昨天搞了好久还是没有解决,今天把springaop小demo敲一遍时,启动tomcat时报错: org.springframework.beans.factory.BeanCreationExcept ...
- eclipse项目两个红点
Description Resource Path Location Type Unbound classpath container: 'JRE Sy 选中项目右键build path 选择libr ...
- 下载win10
http://www.xitongtiandi.net/win10yuanban/2039.html#download
- 提升HTML5的性能体验系列之一 避免切页白屏
窗体切换白屏的现实问题 HTML5的性能比原生差很多,比如切页时白屏.列表滚动不流畅.下拉刷新和上拉翻页卡顿.在低端Android手机上,很多原生App常用的功能和体验效果都很难使用HTML5技术模拟 ...