c语言是一种古老但是依然屹立在众多强势编程语言中的佼佼者,它提供一种能以简易的方式编译、产生少量的机器吗以及不需要任何运行环境支持便能运行的编程语言。oc是完全兼容c语言的一种面向对象语言,所以,学好c语言是进阶oc的必经之路,话不多说,让我们看看c语言的一些基础知识。
函数
c语言中的函数大致分为3种:主函数,用户自定义函数,系统提供的函数库函数。
主函数:也称main函数,一个c程序必须由主函数开始执行,主函数有且只能有一个。
用户自定义函数:可有可无,数量不限。
那么如何定义一个函数呢?
无参数函数定义如下:
返回值类型 函数名()
{
//在函数体中实现函数的功能
函数体;
//如果返回值不是void,需要return 语句,用来返回这个函数操作的结果
}
比如定义一个加法函数:
这里值得注意的是scanf语句,从键盘上读取数据时要注意读取的格式,如果两个占位符之间有空格,那么输入数据也要加上空格。
有参数函数的定义:
返回值类型 函数名(参数列表)
{
//在函数体中实现函数的功能
函数体;
//如果返回值不是void,需要return 语句,用来返回这个函数操作的结果
}
这里值得注意的是,参数列表要注明参数的数据类型
比如定义一个加法
参数分为实际参数和形式参数,那么什么是实际参数,形式参数?
函数名后面括号中传递的是形式参数,在函数调用中传入的参数是实际参数。
既然说到函数,自然会想起很多耳熟能详的函数库函数,下面简要介绍两个
printf:
它是c语言函数库函数,作用是在屏幕中输出数据。
printf(“study c language\n”); //输出字符串“study c language”,\n表示换行
printf(“my age is %d”, 22); //%d是占位符,表示要输出的是int类型的数据,后面传入相应数据类型的数据,这里传入的是22
printf(“my height is %.2f”, 1.83);//这里要传入float类型的数据,保留小数点后两位,这里传入的是1.83
scanf:
它也是c语言函数库函数,作用是从键盘读取数据
int a;
scanf(“%d”, &a); //&是取地址符,顾名思义,就是读取地址,把输入的数据保存到这个地址中
这两个函数都是stdio.h中函数,使用之前应该在开头加上一句,#include<stdio.h>
基本数据类型
可分为如下几类:
基本数据类型:整型 int。浮点型 float , double。字符型 char。
指针类型:void*。
构造类型:数组,结构体,共用体,枚举。
先说基本数据类型吧:不同类型的数据占据的内存是不同的,以16位编译器为例,int 占2个字节,float 占4个字节,double 占8个字节,char占1个字节。
这里给char类型数据赋值时有两种方法:
char character = 65; //这里65代表ascii 码中的第65个字符,a
char character = ‘a’; //直接赋值
还有几种常见错误写法:
char c1 = ‘我’; //汉字不在ascii码中,不能赋值给char变量
char c2 = ‘123’; //123是字符串
char c3 = “123”; //它只能接受一个字符
数组:
数组其实很简单,也没什么说的,作为c语言的一个知识点,我就介绍一下动态数组的使用吧。
动态数组,在声明时没有确定数组大小的数组,当要用它时,可随时用malloc重新指出数组的大小。
什么时候会用到动态数组呢?所需的内存空间取决于实际输入的数据,而无法预先确定。
示例代码如下:
指针:
想要理解指针,先要理解变量赋值的底层过程,当我们声明一个变量时,系统会空出一块地址空间(空间大小取决于变量的数据类型),赋值的时候,直接把数据保存到内存中。
再学习指针之前,先了解两个概念:直接引用,间接引用。
什么是直接引用?通过变量名来读写数据
什么是间接引用呢?首先将一个变量的地址存放在另一个变量中,然后通过另一个变量来间接引用这个变量。
示例代码如下:
值得注意的是:指针很危险,当你对指针操作时,一定要先指向某个变量再对指针操作,否则会造成野指针,乱修改内存中的数据。
指针的应用:交换两个变量的值
我们发现a和b的值并没有交换,这是为什么呢?
问题出在传递的参数上,要想修改变量的值(其实是修改地址中存储的值,所以需要传递地址),需要把参数的地址传给函数,我们可以这样修改函数。