码迷,mamicode.com
首页 > 其他好文 > 详细

嵌入式驱动工程师培训笔记(三)

时间:2014-10-10 22:49:34      阅读:274      评论:0      收藏:0      [点我收藏+]

标签:style   blog   http   color   io   os   使用   ar   for   

一:系统中内存的结构

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);
}

 bubuko.com,布布扣

通过上面的程序 ,了解&和*的功能。   分析 可知  p是指针变量 , 用来存放i的地址。p本身也占据内存 。

2.

bubuko.com,布布扣
#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.

bubuko.com,布布扣
#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 .给定一个数值 判断是一年中的几月几日 忽略闰年 

 

bubuko.com,布布扣
#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.

bubuko.com,布布扣
#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.

bubuko.com,布布扣
#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);

        }

}
完全数

 

嵌入式驱动工程师培训笔记(三)

标签:style   blog   http   color   io   os   使用   ar   for   

原文地址:http://www.cnblogs.com/linrong/p/4017612.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!