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

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

原文链接: https://www.cnblogs.com/renxs/archive/2012/01/16/2323912.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍

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

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/40245

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年2月8日 下午4:57
下一篇 2023年2月8日 下午4:58

相关推荐