zoukankan      html  css  js  c++  java
  • 指针相关笔记

    指针的简单介绍:

    /**

    目的:指针的定义及简单介绍
    时间:2015年7月15日10:43:50

    */

    #include <stdio.h>

    int main(void)
    {
      int i = 3;

      int j;
      int * p; //p是变量的名字,int * 表示的是p只能存放int * 类型的变量的地址

      // error cannot convert from 'int' to 'int *' 因为p只能存放int类型变量的地址,而不能存放int类型变量的值
      // p = i;
      //p = 55;//error

      p = &i;

      /*

      p保存了i的地址,因此p指向i

      p不是i,i也不是p,也就是说,修改p的值不影响i的值,修改i的值也不影响p的值。

      如果一个指针变量指向某个普通变量,则  *指针变量   就完全等同于  普通变量。

        例子:如果p是个指针变量,并且p存放了普通变量i 的地址。

          则: p指向了普通变量 i 

            *p 就完全等同于  i  ,或者说,在所有*p出现的地方都可以替换成 i ,当然多有出现 i  的地方都可以替换成 *p

      *p就是以p的内容为地址的变量。

      */

      j = *p;
        
         printf("i = %d ", i);
         printf("j = %d ", j);
         printf("p = %d ", *p);
         printf("p的地址为:%d ", p);

      return 0;
    }

    /**
    在VC++6.0中运行结果为:
    -------------------------

    i = 3
    j = 3
    p = 3
    p的地址为:1638212
    Press any key to continue

    -------------------------

    */

    指针和指针变量定义和区别:

       1、指针就是地址,地址就是指针,指针就是一个地址值,地址就是内存单元的编号

       2、指针变量是存放地址的变量。

       2、指针和指针变量是两个不同的概念。

       注意:通常我们会把指针变量简称为指针,实际它们的含义不一样。

    指针的重要性:

      1、表示一些复杂的数据结构。

      2、快速的传递数据。

      3、使函数返回一个以上的值(即返回多个值)

      4、能直接访问硬件(获取变量地址)

      5、能方便的处理字符串

      6、是面向对象中引用的基础

      总结:指针是C语言的灵魂

    指针的定义

      地址:

        内存单元的编号

        从零开始的非负整数

        范围:4G [0——4G-1]

      指针:

       1、指针就是地址,地址就是指针,指针就是一个地址值,地址就是内存单元的编号

       2、指针变量是存放地址的变量。

       2、指针和指针变量是两个不同的概念。

       注意:通常我们会把指针变量简称为指针,实际它们的含义不一样。

       指针的本事就是一个操作受限的非负整数。(指针不能进行加、不能进行乘、不能进行除。只能进行相减)

    指针的分类:

      1、基本类型指针

        int * p; //p是变量的名字,int * 表示的是p只能存放int * 类型的变量的地址  p只能存放int类型变量的地址,而不能存放int类型变量的值

        /*

        p保存了i的地址,因此p指向i

        p不是i,i也不是p,也就是说,修改p的值不影响i的值,修改i的值也不影响p的值。

        如果一个指针变量指向某个普通变量,则  *指针变量   就完全等同于  普通变量。

        例子:如果p是个指针变量,并且p存放了普通变量i 的地址。

          则: p指向了普通变量 i 

            *p 就完全等同于  i  ,或者说,在所有*p出现的地方都可以替换成 i ,当然多有出现 i  的地方都可以替换成 *p

        *p就是以p的内容为地址的变量。

        */

      

             2附录:

                       *的含义

                                1、函数

                                2、定义指针变量  int  *p;

                //定义一个名字叫做p的变量,int  * 表示p只能存放int变量类型的地址。

                                3、指针运算符

                                         该运算符放在已经定义好的指针变量的前面,

                                         如果p是一个定义好的指针变量,则*p表示以p的内容为地址的变量。

                      如果通过被掉函数修改主函数普通变量的值,

            1、  实参必须为该普通变量的地址

            2、  形参必须为指针变量

            3、  在被掉函数中通过  *形参名  =  …………的方式就可以修改主调函数变量的值。

      2、指针和数组

          指针和一维数组

                                一维数组名

                                         一维数组名是个指针常量,它存放的是一维数组第一个元素的地址。

              下标和指针的关系

                                         如果P是指针变量,p[i]永远等价于*(p+i)

                                指针确定一个一维数组函数需要两个参数:数组名,数组长度。

                                指针变量的运算

                指针变量不能相加,不能相乘,不能相除。

                如果两个指针变量指向的是同一块连续空间中的不同存储单元,则这两个指针变量可以相减  

               

              一个指针变量到底占几个字节

                          预备知识:

                            sizeof(数据类型)

                            功能:返回值就是你该数据类型所占的字节数。

                              例子:sizeof(int) = 4   sizeof(double) = 8    sizeof(char) =1   

                                                   sizeof(变量名)

                                                   功能:返回值就是该变量所占字节数。

                                              p  q  r 是指针变量

                                                   假设p指向char类型变量char *p = &ch;

                                                   假设q指向int类型变量       int *q = &i;

                                                   假设r指向double类型变量double *r = &j;

                                                   p q r本身所占字节是否一样?

                  结论:一个指针变量,无论它指向的变量占几个字节,该指针变量只占四个字节。

                                                   #include <stdio.h>

                     int main(void)

                     {

                           char ch = 'A';

                           int i = 2;

                           double j = 3.3;

                           char *p = &ch;

                           int *q = &i;

                           double *r = &j;

                        //一个字节有一个编号,指针变量存储的是该变量的第一个字节所//对应的编号,       根据编号类型,判断变量类型

                           printf("%d  %d  %d ",sizeof(p),sizeof(q),sizeof(r));

                             return 0;

                    }

                    /**

                    在VC++6.0中运行结果为:

                    ---------------------------

                    4  4  4

                    Press any key to continue

                    结论:一个指针变量,无论它指向的变量占几个字节,该指针变量只占四个字节。

                    */

      3、指针和函数

      4、指针和结构体

      5、多级指针

      

      

  • 相关阅读:
    Mybatis- 动态sql总结
    Mybatis- 映射文件标签总结
    mybatis全局配置文件标签

    环形链表介绍和约瑟夫环
    MyBatis入门 + 接口式编程(idea实现)
    尚硅谷 mybatis
    Android 开发中使用 SQLite 数据库
    DDMS中File Explorer无法查看data/data文件解决办法
    ANDROID 自动生成动态表格for
  • 原文地址:https://www.cnblogs.com/luo841997665/p/4647691.html
Copyright © 2011-2022 走看看