嵌入式开发第5天(数组)
2016-07-13 09:17
441 查看
数组
一维数组数组:由相同的类型组成,有固定个数,在内存中是连续的一片内存
类型 数组名【数组元素个数】={初值,初值....}
初值的个数不能超出元素个数范围,可以小于
类型:除了 bool 其余的类型都可以
int a[5] = {1,2,3,4,5};
int a[5]; //没有初始值,里面存放的是随机值。
int a[5] = {1,2}; --> int a[5]={1,2,0,0,0};//如果只有一个初值,系统会自动将后面的数据清零
int a[]= {1,2,3,4,5,6 }; --> int a[6] //没有写元素个数,系统会自己计算。
int a[]= {1,2,0,0,[89]=5,4}; //第89是5 ,90是4。2~88 系统默认为0;
int a[]= {1,2,[89 ... 95]=5,9} //第89~95 等于5 ,96等于9;
使用:
下标[]:有效下标范围从0开始,有N个元素,有效下标为N-1
注意: 下标可以越界 ,但越界值非自己所定义的数组
int a[5]={1}; printf("%d",a[5]) ; //结果为越界值
练习:修改数组的值int a={1,2,3,4,5,6,7,8,9,10}改为{11,12,13,14,15,16,17,18,19,20}
如何从键盘里面取值
int val; scanf("%d",&val);
int a[10]; scanf("%d",&a[0]);
注意:必记
int a[10];
通常:
a是数组名,是第一个元素的地址&a[0]
a ===========等价于===========&a[0];
1、&a表示指向整个数组的地址
int a[5]={1};
a addr = 0xbfd7232c
a +1 = 0xbfd72330 4 a+1
cd3f
==== a+1*4 (4为数据类型大小)
&a[0]+1 = 0xbfd72330 4 &a[0]+1 ==== &a[0]+1*4 (4为数据类型大小)
&a = 0xbfd7232c 0 &a = a = &a[0];值相等,但是是意义不同
&a+1 = 0xbfd72340 20 &a+1 === a+4*5 (4代表数据类型大小,5代表元素个数)
char a[5]={1,3,6,9,10};
*(a+3) = *(&a[0]+3)==a[3]
*a+3 = a[0]+3
字符数组
char arr[6]="hello";{'h','e','l','l','o','\0'};
char arr[6]={'a','b','c','\0'};%s %c
练习:
1、 在终端输入10值并存储到数据当中
找到10个整形数的最大值和最小值,求这两个数之和
先设定一个参考的最大值max和一个参考的最小值min
然后逐个比较,如果有比max大或者比min小的,更改参考值。
2、读取输入,直到遇到字节#才结束,总字符不超过100个
上报读取到的空格数目、换行符数目、其它字符的总数
显示输入的整个字符数组
#include<stdio.h>
int main()
{
char c;
char buf[100];
int sum = 0,space=0,enter=0,other=0;
while(1)
{
if(sum < 100)
{
c = getchar();
if(c == '#')
{
break;
}
else
{
buf[sum] = c;
sum++;
}
if(c == ' ')
space++;
else if(c == '\n')
enter++;
else
other++;
}
else
break;
}
printf("space =%d,enter=%d,other=%d",space,enter,other);
return 0;
}
3、冒泡排序法,将一组数组中的元素进行排序,排序从小到大;
int a[10];
a是数组名,是第一个元素的地址&a[0];
例如:sizeof(a) 整个数组的大小
字符数组 ==== 字符串
int arr[50]="sdfea";
sizeof(arr);计算结果为整个数组的长度包括“\0”;
strlen(char *s); //计算字符串长度,不包括'\0';
#include <string.h>
int strlen(const char *s);
返回值:字符串长度
const char *s:字符串的首地址;
练习:自己编写一个函数,函数实现strlen功能;
int my_strlen(const char *s)
{
int len = 0;
while(*s!='\0')
{
s++;
len++;
}
return len;
}
int main(void)
{
char a[100]="sdsadfsdfjfewsdf";
int main_len;
main_len = my_strlen(a);
printf("main_len = %d\n",main_len);
return 0;
}
函数:
模块化,黑盒子:不需要关心里面是怎么样实现,但是需要知道的输入及输出是什么
1、减少代码的重复编写,直接写一次,可以多次调用
2、函数功能可以写成一个模块,方便删除
函数定义
(函数存储类型)返回参数类型 函数名(参数)
函数的存储类型:
static
返回参数类型 :char short int等基本数据类型,或者是地址。需要return;
如果不需要返回值,直接写成void,代码中不需要return;
函数名:
命名规则:下划线或者字母开头,由下划线、字母、数字
参数:可以是参数列表,如果不需要参数,传void
int i,int y
char short int等基本数据类型:
char fun(void)
{
char ch;
....
return ch;
}
地址:
int *fun(const char *s)
{
int *p;
.......
return p;
}
void Delay(int i,int j)
{
int x,y;
for(x=0;x<i;x++)
for(y=0;y<j;y++);
}
void fun(int a,int b)
{
....
....
....
}
int main(int argc,char **argv)
argc : 参数个数
argv
: 参数内容地址
练习:在终输入时选择执行函数的功能,参数为a,计算两个数的和,参数为s,执行两个数相减,参数为f,对数组进行冒泡排序。
#include<stdio.h>
int main(int argc,char **argv)
{
int a,b,c,temp,mao[10];
switch(*argv[1])
{
case 'a': goto add;
case 's': goto sub;
case 'f': goto maopao;
}
add:
printf("please into two number\n");
scanf("%d %d",&a,&b);
printf("%d+%d=%d\n",a,b,a+b);
return 0;
sub:
printf("please into two number\n");
scanf("%d %d",&a,&b);
printf("%d-%d=%d\n",a,b,a-b);
return 0;
maopao:
printf("please input ten number\n");
while(b<=9)
scanf("%d",&mao[b++]);
for(c=8;c>=0;c--)
{
for(b=0;b<=c;b++)
{
if(mao[b]<mao[b+1])
{
temp=mao[b];
mao[b]=mao[b+1];
mao[b+1]=temp;
}
}
}
b=10;
while(b>0)
printf("%d ",mao[--b]);
return 0;
}
练习:自己编写代码实现strcmp、strcat;
加强版练习:随机生成6位验证码:实现输入验证,如果三次输入错误,退出程序,正确输出:Helloworld
相关文章推荐
- ucenter中词语过滤原理分析
- 分享一个用php写的人民币数字转人民币大写的函数
- js(十七)——js主要知识点简述
- 关于ARM和Linux的操作
- 移动平台3G手机网站前端开发布局技巧汇总
- 不自定义cell,最原始的创建UITableViewCell
- XXX银行人事管理系统-数据库设计
- 添物零基础到架构师(基础篇) - JavaScript
- 添物零基础到架构师(基础篇) - JavaScript
- 第04章:面向对象(基础)
- jsp页面中文乱码问题
- HDU-2795-Billboard(线段树 点更新求最值)
- Android 自定义属性类型
- samba 配置
- Android常用工具类
- Boltzmann机
- Docker Swarm集群实践——部署篇
- JavaActivity工作流
- Extending R
- 用代码实现将二进制数转换为十进制,(非使用API)