美文网首页
7.C语言-指针

7.C语言-指针

作者: 后备干部 | 来源:发表于2017-01-24 21:02 被阅读0次

    1. 二维数组

    * 把二维数组a分解为一维数组a[0],a[1],a[2]之后,设p为指向二维数组的指针变量。可定义为:
    * int (*p)[4]
    * 它表示p是一个指针变量,它指向包含4个元素的一维数组。若指向第一个一维数组a[0],其值等于a,a[0],或&a[0][0]等。
    * 而p+i则指向一维数组a[i]。
    * 从前面的分析可得出*(p+i)+j是二维数组i行j 列的元素的地址,而*(*(p+i)+j)则是i行j列元素的值。
    * 二维数组指针变量说明的一般形式为:
    * 类型说明符  (*指针变量名)[长度]
    * 其中“类型说明符”为所指数组的数据类型。“*”表示其后的变量是指针类型。“长度”表示二维数组分解为多个一维数组时,一维数组的长度,也就是二维数组的列数。
    

    2.字符指针变量和字符数组

    * 虽然用字符数组和字符指针变量都能实现字符串的存储和运算,但它们二者之间是有区别的,不应混为一谈……
    * 主要概括起来有以下几点:
    * 1. 字符数组由若干个元素组成,每个元素中  放一个字符,而字符指针变量中存放的是地址(字符串第1个字符的地址),决不是将字符串放到字符指针变量中。
    * 2. 赋值方式。对字符数组只能对各个元素赋值,不能用以下办法对字符数组赋值。
         char  str[20];
         str=″I love Fishc.com!″;
      
      而对字符指针变量,可以采用下面方法赋值:
         char*a;
         a=″I love Fishc.com!″;
      但注意赋给a的不是字符,而是字符串第一个 元素的地址。
    * 3. 对字符指针变量赋初值:
        char *a=″I love Fishc.com!″;
           等价于
          char*a;
        a=″I love Fishc.com!″;
    
        而对数组的初始化:
        char str[20]={″I love Fishc.com!″};
        不能等价于
        char str[20];
        str[ ]=″I love Fishc.com!″;
    * 4. 如果定义了一个字符数组,在编译时为它分配内存单元,它有确定的地址。而定义一个字符指针变量时,给指针变量分配内存单元,在其中可以放一个字符变量的地址也就是说,该指针变量可以指向一个字符型数据,但如果未对它赋予一个地址值,则它并未具体指向一个确定的字符数据。  
    * 我们举个例子来说明
    * 如:   char str[10];
          scanf(″%s″,str);
               以上是完全可以的!
    * 而常有人用下面的方法,目的是想输入一个字符串,虽然一般也能运行,但这种方法是危险的 :
                 char*a;
          scanf(″%s″,a);
    

    3. 有关指针的数据类型的小结

    QQ20170125-1.png

    4. void指针

    * ANSI C新标准增加了一种“void”指针类型,即不指定它是指向哪一种类型数据的指针变量。
    * 例如:void *p;
    * 表示指针变量p不指向一个确定的类型数据,它的作用仅仅是用来存放一个地址。
    * void指针它可以指向任何类型数据。也就是说,可以用任何类型的指针直接给void指针赋值。但是,如果需要将void指针的值赋给其他类型的指针,则需要进行强制类型转换。
    

    相关文章

      网友评论

          本文标题:7.C语言-指针

          本文链接:https://www.haomeiwen.com/subject/coxtittx.html