现在由于工作原因开始搞ios,加急培训一个月开始开发工作。由于在大学C语言欠下的太多,很多OC中用到的一些C语法感觉很头疼,故趁今天工作没什么记录的空档“重温”一下C语言,弥补曾欠下的债。
1.变量修饰符
a) auto 自动存储类别。auto int a = 3和int a = 3没区别,auto可以省略。(在我脑海里从来没出现这个关键字,要不是看书了还真不知道)
b) extern 常用来声明外部变量。比如:
int f(){
extern int A,B;
printf(“%d,%d\n”,A,B);//使用
}
int A =12,B=1;//声明并初始化
也就是说在声明一个变量之前就在函数中使用到了这个变量,就需要在该函数中将这个变量声明为外部变量。因为如果不声明为外部变量,按照规定,函数外面的变量的作用域是从声明开始到文件结束,在非作用域内使用,当然是会报错的!!!
2.预处理
凡是以#号开头的都是预处理命令。
a) 无参宏。定义如:#define 宏名 宏表示的字符串。预处理时会将所有使用该宏的位置将宏名替换成其表示的字符串。
b) 有参宏。比如:#define max(a,b) a>b?a:b。调用时比如:f=max(1,2)会将实参带入进行计算,结果为f=2;
c) 条件编译。定义如:#ifdef 标识符1 //或者是#ifndef
程序段1
#else
程序段2
#endif
就是说在满足标识符1所要求的条件下加载程序段1,不满足就加载程序段2,简单明了。书上看基本用于了#include命令,防止重复包含,由于oc引入了java的import,所以我都是import进去的,谁叫我跟它熟呢。。。
3.指针。指针是C语言的重头戏,短时间学习让我容易晕,oc中我只要基本能知道简单的怎么用就行啦,而且感觉oc中没必要搞的像书上那么复杂吧,感觉知道表示的啥就差不多了吧:
a) int *p[n]; 定义指针数组p,有n个指向整型数据的指针元素
b) int (*p)[n]; p为指向含n个元素的一维数组的指针变量
c) int *p(); p为带回一个指针的函数,该指针指向整型数据
d) int (*p)(); p为指向函数的指针,该函数返回一个整数值
e) int **p; p是一个指针变量,指向一个指向整型的指针变量
4.结构体。等同与java里面的对象,定义如:
struct stu{
int num;
char sex;
};//定义结构体
struct stu boy1,boy2;//声明两个结构体变量
或者就直接在定义结构体时声明结构体变量,例如:
struct stu{
int num;
char sex;
} boy1,boy2;
然后就是爱咋用咋用,之所以写下来就是看着这种方式不太习惯,不过看着看着应该也就习惯了。书中把结构体和指针各种例子组合,看上去挺复杂,挺晕,其实吧,也就是代码挤一块看着晕,想想就当java中的实体类,不就是一种自定义的类型么。。。
5.enum和typedef。java 中虽然也有枚举,不过我好像基本没用过。OC代码中,尼玛上来就是 enum{XXX}和typeddef XX XX,着实看着别扭啊。赶紧看看定义吧:enum 【枚举名】 {枚举值表}
。Typedef定义:typedef 原类型名 新类型名,我能说这是喜新厌旧的节奏么。。。
目前通过OC接触到的C语言困惑或别扭的地方就只有这么多,对于那些C语言的大神我一向都是很钦佩的,比方说大学时对门寝室某个,目前在浙大软件学院读研,还是高材生啊(不知道是不是看了那年的招生海报才考的,难道是看上那女的了),感觉自己智商偏低,还是搞容易上手的吧。