嵌入式学习之路(十二)——C语言学习(7)

           嵌入式学习之路(十二)——C语言学习(7)

  前面我们已经讲了C语言用到最多的循环和分支语句,下面我们来讲将数组和指针吧。
  1.数组:代表了内存中多个连续的数字,他要求每个存储位置的数据类型一样。
          数组所对应的每个存储位置有一个编号,第一个编号为0,依次递增
          那么什么是数组呢?我们来看看:
          int arr[10] = {1,2,3,4,5,6,7,8,9,0};
          上面我们就定义了一个长度为10的数组,而且数组的元素是从1到0
          而且arr[0] = 1;arr[1] = 2;以此类推a[9] = 0;这就是数组的表示方式
          数组的优势:可以同时定义多个类型一样的数据
                      他的每个存储位置是连续的
                      而且想对数组里的元素进行读取的时候也方便
          那么数组应该怎么用呢?我们可以来写个程序。
          程序:1-从键盘读入10个数,每次只能读一个,全部读完后,逆序输出?
          我们来分析这个程序,如果按照我们以前的方法,是不是就需要10个变量来存储我们的10个输入的数?int num1  = 0;int num2 = 0;......
          而我们用了数组我们就可以int num[10] = {0};是不是方便很多呢
#include <stdio.h>


int main()
{
    int num[10] = {0};
    int i = 0;//循环变量
    /*循环输入10个数*/
    for(;i < 10;i++)
    {
        printf("请输入一个数");
        scanf("%d",&num[i]);
    }
    for(i=9;i>=0;i--)
    {
        printf("%d ",num[i]);
    }
    return 0;
}
这样我们就可以对数组进行操作啦。是不是很方便呢?
  2.指针:指针变量他本身也是一个变量,存放的是其他数据的地址。
    int num = 0;//定义一个int类型的数
    int *p_num = NULL;//定义一个存放int类型的数的地址
    接下来就是把int类型的num的地址存放在p_num里,
    p_num = &num;//把num的地址放在p_num里,这样我们想去操作num的时也可以通过p_num去找num,因为p_num里面存放了num的地址,有地址我们知道快递才可以送到指定的地方。
    所以我们可以这样操作:
    *p_num = 1;//通过p_num来操作num里面的数据,这个是允许的,我们可以把*理解成去到那个地址,到了那个地方我们当然可以改变这个地址里面的数啊,是不是不是很难理解呢?指针其实就是一个变量,他和其他变量不同的地方就在于他里面存放了别人的地址,可以去干预/帮助别人干事情。
    也可以这样理解,num是张三的家,他的地址&num是文三路1号,而李四手里有问三路1号的钥匙,p_num = &num;他可以找到张三家,并且可以去到张三家(*p_num),去他家帮他干点事情。
    有了这样的一个理解,我们就可以先干点事情看看。
    程序:2-从键盘读入10个数,每次读一个,全部读完后,用指针逆序输出。
#include <stdio.h>


int main()
{
    int num[10] = {0};//10个数的数组
    int i = 0;//循环变量
    int *p = NULL;
    p = num;//把数组的首地址给指针变量p
    for(;p < num+10;p++)
    {
        printf("请输入一个数");
        scanf("%d",p);
    }
    p = num;//把p重新指向数组的首地址
    for(i = 9;i>=0;i--)
    {
        printf("%d ",p[i]);
    }
    return 0;
}
从这个程序我们可以看到,
  首先,地址也是可以加的,p++代表向后移动了与int一样的字节,跳到了下一个数组元素
  其次,一个指针指向一个数组之后,我们发现他可以和数组一样使用p[i],但是在这之前,我们需要把p的指针重新指向num的首地址,为什么呢?因为上面我们移动了p,就表示p里面存放的地址已经变了,我们要想再对数组操作的话,我们需要重新将数组的地址赋给指针变量p。
  今天我们就消化消化这个程序,如果这个程序能够理解并且能够写出来的话,说明我们才能学习后面的更加复杂的指针和数组的问题。我们就好好消化消化吧。

你可能感兴趣的:(unix,嵌入式,C语言,指针)