20150123 【 ARM 】 C语言+函数

来源:互联网 发布:mac 窗口超出屏幕 编辑:程序博客网 时间:2024/05/21 17:47
函数
函数声明,函数定义, 函数参数, 函数递归
函数声明

数据类型  函数名称(参数列表) (如果函数没有返回值就用void)
{
函数体
}

函数的作用:功能模块化,可以重复使用,使用方便

/*把华氏转换摄氏温度
*参数:华氏温度
*返回值:摄氏温度*/
float fah_to_ct(float f)
{
//float f=98.9;
float ct = 0.0;
ct = 5*(f-32)/9;
return ct;
}

函数参数:
形式参数:函数声明或定义时候传入的参数为形式参数
实际参数: 函数被调用的时候传入的参数为实际参数,实际参数是用来初始化形式参数
int main(void)
{
float ct = fah_to_ct(98.9);
return 0;
}

传参数方式
传值:add(10, 20);
int add(int a, int b)
{
//int a=10;
//int b=20;
return a+b;
}
传地址
函数递归:函数自己调用自己(一定要有判断结束返回)
用函数递归来实现1+2+...+n
int result(int n)
{
if(n==1) return 1;
return n+result(n-1);
}
库函数
数学库函数(math.h)在程序编译的时候要加 -lm(libm.so.)
sqrt, asin, acos, atan, acot, abs绝对值
常用字符函数
strcpy---字符串拷贝
strcpy(目标地址, 源地址)
strlen---字符串长度计算---('\0'不包含在内)
strcat---字符串拼接
strcmp---字符串比较 strcmp("hello", "hello") == 0
strstr---字符串查找 "hello google"   “goo”
sizeof----计算数据类型大小
main函数传参数
int main(int argc, char *argv[])
{

}

实验:
2. 
3.
4.
my_power(int n, float f)
{
int i=0;

if(n==0)return 1;

float rlt = 1;
for(i=0; i<abs(n); i++)
{
rlt *= f;
}

if(n>0) return rlt;
else return 1/rlt;
}

printf("%s", buf) ;   ---printf打印是以\0结束

数组
一维数组
数据类型 数组名[数组长度];
char buf[32];
int n =10;
char buf[n];
数组特点:1.定义数组是必须指定长度
2.数组是一段连续的空间
3.数组名可以看作数组的首地址
4.数组可以越界
5.数组下标0至数组长度减1 buf[0]---buf[31]
数组定义和初始化
int a[5] = {1,2,3,4,5}; 
int a[5] = {1};//默认初始化0
int a[] = {1,2,3,4};
int a[5];
a[0] = 1;
a[1] = 2;

字符数组
char buf[5] = {'a','b','c','d','e'};
char buf[5] = "abcde";
char buf[5] ={'a'};//默认\0
char buf[5] ;
buf[0]='a';
strcpy(buf, "abcde");
 
练习:从键盘输入字符存入char buf[32]中,在一次性把buf输出


练习:用getchar从键盘输入字符(数字,字母)定义两个数组一个是int a[32]存储输入的数字
再定义一个char b[32] 存储输入的字符,最后字符和数字分别输出
提示:0---48
 a---97
 A---65

上课笔记链接自己可以在任意位置下载,以后每天的笔记都会上传
链接:http://pan.baidu.com/s/1gdGNbph 密码:y59y 

二维数组
数据类型 数组名[行][列]
int a[3][4] = {{1,2,3,4},{5,6,7,8},{9,10,11,12}}
int a[3][4] = {1,2,3,4,5,6,7,8,9,10,11,12}
int a[3][4] = {{1},{1},{1}}
int a[][4] = {1,2,3,4,5,6,7,8,9,10,11,12}
int a[3][4];
a[0][0] = 1;

数组名:---第一个个元素的地址(二维数组的数组名有三重身份:数组首地址,第一行地址,第一元素地址)

g[30][100]
1.g[22][56] ---地址&g[22][56]
2.g[22][0]-----&g[22][0] , g[22]
3.g[0][0] -----g, &g[0][0], g[0]

练习:定一个二维数组int array[4][4] = {{12,45,76,87},
 {34,65,123,67},
 {35,65,23,78},
 {32,67,89,21}};两条对角线总和
 
int main(void) 
{
int array[4][4]={{12,45,76,87},{34,65,123,67},{35,65,23,78},{32,67,89,21}};

int sum = 0;
int i=0, j=0;
for(i=0,j=3; i<4; i++,j--)
{
sum += array[i][i]
if(i == j) continue;
sum += array[i][j];
}
return 0;
}

字符二维数组
char buf[3][5] = {{'a'},{'b'},{'c'}}
char buf[3][10] = {"hello", "world", "goolge"};


指针
指针就是地址
指针变量  数据类型 *变量名 
(*在定义时候表示指针变量,在定义后用表示解引用(取指针所指向地址中内容))

int a = 10;
int *p = &a; 
*p == 10;

练习: char *p = NULL;
 char buf[] = "hello";
 用p把buf中的字符一个一个输出

 p = buf;
 while(*p != '\0')
 printf("%c", *(p++))
 
指针运算
int a = 10;
int b = 20;
int *p = &a; ---0xffeedd55
int *q = &b; ---0xffeedd59
----------------------------
int a[10];
int *p = a;-------0x100  ---》p+1 == 0x104
int *q = &a[5];---0x114

同一类型指针
指针与指针加----p+q ==>&a+&b==> 没有意义
指针与指针减----q-p ==>5 ===》为两个指针之间相差元素个数
指针与数加p+n ==》p加p所指向数据类型大小*n  
指针与数减







0 0
原创粉丝点击