首页 > 代码库 > 嵌入式驱动工程师培训笔记(三)
嵌入式驱动工程师培训笔记(三)
一:系统中内存的结构
4g 起始地址为bfffffff |
3g 起始地址为7fffffff |
2g 起始地址为3fffffff |
1g 起始地址为00000000 |
上图所示,虚拟内存为4g,操作系统规定应用程序只能在前3g ,后面1g是操作系统使用。涉及到内核编程时使用。
二:指针和数组介绍:
指针需要了解的是 指针的类型 指针所指向的类型 指针的值或者说是指针所指向的内存区,还有指针本身所占据的内存区
& 取地址符号 , * 解地址。
数组名为数组的首地址。
三:C数据类型
1.基本数据类型 int char long ...
2.结合 [ ] * 不能单独使用
3.自定义: struct union ...
四 :上课练习编程题目:
1.
#include<stdio.h>int main(){ int i = 10; int *p = &i; int** k = &p; printf("i 的地址为%p \n",&i); printf("i 的地址的值为%d \n",*(&i)); printf("i 的地址为%p \n",p); printf("i 的地址的值为%d \n",*p); printf("p 的地址为%p \n ",&p); printf(" p 的地址里的值为%p\n",*(&p)); printf(" p 的地址里的值为%p\n",*k); printf("k 的地址为i%p\n",&k);}
通过上面的程序 ,了解&和*的功能。 分析 可知 p是指针变量 , 用来存放i的地址。p本身也占据内存 。
2.
#include<stdio.h>int hello(int *p){ printf("*p is %d\n",*p); *p = 100;}int main(){ int i = 10; hello(&i); printf("i is %d\n",i);}~
在子函数中,使用传指针变量来改变主函数中的值。
3.
#include<stdio.h>int swap(int *a,int *b);int swap2(int *a ,int *b);int swap3(int *a,int *b);int main(){ int a = 5; int b = 6; swap(&a,&b); printf("a=%d,b=%d\n",a,b); swap2(&a,&b); printf("a=%d,b=%d\n",a,b); swap3(&a,&b); printf("a=%d,b=%d\n",a,b);}int swap(int *a, int *b){ int temp=0 ; temp = *a; *a = *b; *b = temp;}int swap2(int *a ,int *b){ *a = *a + *b; *b = *a -*b; *a = *a - *b;}int swap3(int *a ,int *b ){ *a = *a ^ *b; *b = *a ^ *b; *a = *a ^ *b;}
交换两个数的值有三种方式,使用中间变量,使用加减 ,使用位运算,要注意的是,使用加减时要注意数值溢出
4.
#include<stdio.h>int main(){ int i = 654; printf("%d", printf("%d",printf("%d",i)));}
遇到无从下手时,可以查看函数的手册 通过 man 3 printf 查看可知 ,printf返回的是输出的字符个数(\o 不算)
所以最后输出的结果是 65431
5 .给定一个数值 判断是一年中的几月几日 忽略闰年
#include<stdio.h>int showmd(int n);int main(){ int mouth[12] = {31,28,31,30,31,30,31,31,30,31,30,31}; int m = 12; int d = 31; int days = 0; int i ; for(i=0;i<m-1;i++) { days += *(mouth+i); } printf("days is %d\n",days+d); showmd(days+d);}int showmd(int n){ int i; int j; int mouth[12] = {31,28,31,30,31,30,31,31,30,31,30,31}; int days = 0; for(i=0;i<12;i++) { days += *(mouth+ i); if(days >= n) { j = days -n ; printf("月份为%d,日期为%d\n",i+1,*(mouth+i)-j); break; } }}"test.c" 43L, 547C 1,1 Top
6.
#include<stdio.h>int main(){ int n; int i; for(i=0;i<120;i++) { if(i%7==0) { if((i%2==1)&&(i%3==2)&&(i%4==3)&&(i%5==4)&&(i%6==5)) printf("%d\n",i); } }}~
7.
#include<stdio.h>int main(){ int i,j,sum; for(i=2;i<1000;i++) { sum = 0; for(j=1;j<i;j++) if(i%j == 0) sum +=j; if(sum == i) printf("完全数为%d\n",i); }}
嵌入式驱动工程师培训笔记(三)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。