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
指针与数减
函数声明,函数定义, 函数参数, 函数递归
函数声明
数据类型 函数名称(参数列表) (如果函数没有返回值就用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
- 20150123 【 ARM 】 C语言+函数
- 用C语言函数写ARM寄存器预定义分析
- Linux ARM C语言中调用汇编函数
- ARM C语言笔记
- ARM汇编程序---通过ARM汇编调用C语言函数实现累加
- ARM汇编程序---通过ARM汇编调用C语言函数实现累加
- ARM-bootloader-C语言环境设计
- 20150121 【 ARM 】 C语言+变量
- 20150122 【 ARM 】 C语言+循环
- 20150124 【 ARM 】 C语言+指针
- ARM汇编与C语言混合编程之汇编调用C函数
- arm汇编语言调用C函数
- OK6410 uboot1.1.16/lib.arm的board.c相关函数分析(C语言执行的第一个函数start_armboot)
- ARM下的C语言函数和对应的汇编代码
- ARM基础:为何C语言(的函数调用)需要堆栈,而汇编语言却不需要堆栈
- 【ARM-Linux开发】C语言getcwd()函数:取得当前的工作目录
- 【C语言】C语言函数
- C语言函数 --C
- 选夫婿
- Android开发,用户按返回键的处理
- java根据模板生成word文件
- 第十三章:13.1.2 进程管理-终止进程
- 最新抢救三天仍不幸离世 杭州一40岁男子被鱼刺卡住
- 20150123 【 ARM 】 C语言+函数
- HDU 1111 - Secret Code (DFS + 一点数学 + 模拟)
- 自考《操作系统概论》之宏观理解
- virtualbox 启动时报Kernel driver not installed (rc=-1908) 的错误
- 判断回文字符(包含去空格)
- 将控件与Control类的变量关联时要注意的一个问题
- IPSec VPN和SSL VPN:对比两种VPN的安全风险
- 个人安装系统记录
- malloc和free函数详解