• C++指针与引用以及数组


          也许你会喜欢 C++学习 破冰之旅(目录)

    备注:指针 引用 数组的东西包含很多。但我想以我现在的能力只能写个皮毛了,所以合成一篇里写。

         这里我就不在是一步步的讲解什么指针了.直接讲解指针 引用 和数组的应用了。以后会随着理解的深入 再次修改这篇笔记。谢谢!

    1、指针类型 介绍

         数组指针与指针数组

         函数指针与返回为指针的函数

         指针的指针

         const 指针

         野指针 方法里的以及指向常量字符串的指针

    、  

    2、指针与引用都是间接引用其它对象

         指针指向一块内存,它的内容是所指内存的地址;而引用则是某块内存的别名,引用不改变指向。

         1、引用肯定会指向一个对象,引用应该被初始化,一定不存在空引用(将导致错误)

              指针可以不用初始化,使用指针之前必须做判断空操作,而引用就不必

         2、引用一旦初始化后不能修改,永远指向它初始化的那个对象

         3、引用的大小就是指向的变量的大小,因为引用只是一个别名而已;指针是指针本身的大小

        4个字节。

     3、指针、数组与引用运用

          数组 对于函数参数列表中以数组类型书写的形式参数,编译器把其解释为普通的指针类型,如对于void func(char sa[100],int ia[20],char *p)则sa的类型为char*,ia的类型为int*,p的类型为char*

         1>如果char str[]="abc";是在函数内部写的话,那么这里的“abc\0”因为不是常量,所以应该被放在栈上。如果char * ptr="abc";因为定义一个普通指针,这里的“abc”作为常量把它放到程序的常量区。尽管ptr类型不是const char* 并且ptr[0]='x';也能编译通过,但是执行ptr[0]='x';就会发生运行时异常,因为语句去修改常量区中的东西。建议写法是 const char* ptr="abc";这样的话ptr[0]='x'的编译就不会通过。 char *ptr="abc";写在函数体内,虽然这里的“abc\0”放在常量区,但是ptr本身只是一个普通的指针变量,所以ptr是被放在栈上的,只不过它指向的东西被放在常量区里而已。

     4、字符指针、字符数组以及sizeof

         1、以字符串形式出现的,编译器都会为该字符串自动添加一个0作为结束符,如在代码中写“abc”,那么编译器帮你存储的是“abc\0”

         2、“abc”是常量吗?答案是 有时候是,有时候是,不是常量的情况是:“abc”作为字符数组初始化的时候就不是,如 char str[]="abc";定义的是一个字符数组,所以就相当于定义了一些空间来存放“abc”.字符数组就是把字符一个一个的存放的,所以编译器把这个语句解析为 char str[4]={'a','b','c','\0'}

        3、sizeof操作符 返回值类型为size_t  特别注意它是编译时常量

           sizeof 是用来就类型的字节数的 如int a那么无论是 sizeof(int) 或者sizeof(a) 都是等于4(字节) sizeof(a)其实就是sizeof(type of a)

          1>对char类型或者值为char类型的表达式做sizeof 操作保证得1

          2>对引用类型做sizeof操作将返回存放此引用类型对象所需要的内存空间大小

          3>对指针做sizeof操作将返回存放指针所需要的内存大小;注意,如果要获取该指针所指向对象的大小,则必须对该指针进行解引用

          4、对数组做sizeof操作等效于将对其元素类型做sizeof操作的结果乘上数组上元素的个数。因为sizeof返回整个数组在内存中的存储长度,所以用sizeof数组的结果除去sizeof其元素类型的结果,即是 数组元素的个数。

     4、指针与数组

     5、指针递增运算

           ++操作符优先级高于*操作符,这两个操作符的结合性都是从右向左

          ++cp :把cp+1然后返回指针的拷贝

           cp++: 返回指针的拷贝然后把cp+1

          *++cp: 先cp+1 指向下一个内存地址,然后对它解引用

           *cp++: ++操作符产生cp的一份拷贝,然后++操作递增cp的值,然后在cp的拷贝上对它解引用

      //     ++*cp:首先对cp解引用,然后  这个需要探讨........?

          (*cp)++:首先解引用,然后递增解引用的值

    6、Delete 指针

         Delete操作符已经对指针是否为空做过判断了

    参考:http://www.cnblogs.com/yanlingyin/archive/2011/12/07/2278961.html

             http://www.cnblogs.com/iuices/archive/2011/11/03/2234877.html

             http://www.cnblogs.com/skynet/archive/2010/09/22/1832911.html

    静静的寻找属于自己的.....

  • 相关阅读:
    Eclipse无法导入一些相关类的方法,出现Multiple markers at this line
    查看共享命令
    eclipse历史版本的下载地址
    MyEclipse的快捷键
    Hibernate的隔离级别
    eclipse插件下载地址
    UML类图几种关系的总结
    Oracle正则表达式函数:regexp_like、regexp_substr、regexp_instr、regexp_replace
    回滚段的学习
    Oracle 字符集的查看和修改
  • 原文地址:https://www.cnblogs.com/renxs/p/2323912.html
Copyright © 2020-2023  润新知