嵌入式开发第5天(数组)
来源:互联网 发布:python 写入文本文件 编辑:程序博客网 时间:2024/05/17 13:09
数组
一维数组
数组:由相同的类型组成,有固定个数,在内存中是连续的一片内存
类型 数组名【数组元素个数】={初值,初值....}
初值的个数不能超出元素个数范围,可以小于
类型:除了 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 ==== 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[n] : 参数内容地址
练习:在终输入时选择执行函数的功能,参数为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
0 0
- 嵌入式开发第5天(数组)
- 嵌入式开发第7日(数组与指针)
- 嵌入式开发第49天(RTC)
- 嵌入式开发第6天(指针,解引用和取地址,数组之间的地址差值,gdb)
- [翻译][php扩展开发和嵌入式]第8章-在数组和哈希表上工作
- 嵌入式开发第25天(无名管道,有名管道,信号)
- 嵌入式开发第30天(线程池)
- 嵌入式开发第37天(shell编程:shell是什么?)
- 嵌入式开发第41天(什么是ARM?)
- 嵌入式开发第42天(ARM的体系结构)
- 嵌入式开发第44天(GPIO的使用)
- 嵌入式开发第46天(ARM的时钟体系)
- 嵌入式开发第47天(看门狗定时器的原理)
- 嵌入式开发第50天(s5pv210的LCD原理)
- 《专业嵌入式软件开发》笔记-第5章addr2line
- 为什么选择嵌入式开发(嵌入式系统第一节课讲稿)
- 嵌入式开发第16天(开发板触摸驱动,mmap)
- 【嵌入式开发】C语言 指针数组 多维数组
- 关于ARM和Linux的操作
- 移动平台3G手机网站前端开发布局技巧汇总
- 第05章:面向对象(高级)
- 态度
- sscanf用于匹配时间格式
- 嵌入式开发第5天(数组)
- iOS开源项目HYBHelperKit
- FreeSWITCH 专业英语
- Android生成带LOGO图片二维码的方法
- STL关联式容器之集合set
- 2、一切都是对象
- IOS Dev Intro - NSCondtion
- nginx负载均衡
- mac切换jdk版本