设为首页 加入收藏

TOP

C++ 数组和指针学习笔记
2014-11-23 22:06:55 来源: 作者: 【 】 浏览:10
Tags:指针 学习 笔记

数组


定义及其初始化


1、数组的维数必须用值大于等于1的常量表达式定义(包括:整型字面值常量、枚举常量、用常量表达式初始化的整型const对象),非const变量以及到运行阶段才知道其值的const变量都不能用于定义数组的维数。


3、定义数组时没有显式的初始化,则:


----在函数体外定义的内置数组,元素均初始化为0


----在函数体内定义的内置数组,元素均无初始化


----无论在何处定义,若其元素为类类型,则自动调用其默认的构造函数初始化;若无构造函数,则必须为该数组的元素提供显式的初始化


2、字符数组可以使用字符串字面值进行初始化,但当使用字符串字面值来初始化字符数组时,将在数组后面加入空字符,例如:char A[] = "C++"; //A的维数是4


3、与vector不同,一个数组不能用另一个数组初始化,也不能将一个数组赋值给另一个数组


注意:数组长度固定,一旦定义,就无法添加新的元素。但是若要添加,则需要自己更改内存remalloc()以及malloc()函数可以实现


数组的操作


下标访问。下标的数据类型:size_t


指针


定义及其初始化


建议:尽量避免使用指针和数组


  指针和数组容易产生不可预料的错误。其中一部分是概念上的问题:指针用于低级操作,容易然生与繁琐细节相关的(book keeping)错误。其他错误则源于使用指针的语法规则,特别是声明指针的语法。


  许多有用的程序都可不使用数组或指针实现,现代C++程序采用vector类型和迭代器取代一般的数组、采用string类型取代C风格字符串。


指针可能的取值


  一个有效的指针必然是以下三种状态之一:保存一个特定对象的地址;指向某个对象后面的另一对象;或者是0值。若指针保存0值,表明它不指向任何对象。未初始化的指针是无效的,直到给该指针赋值后,才可使用它。


C语言梳理一下,分布在以下10个章节中:


 int ival = 1024;
  int *pi = 0;      // pi initialized to address no object
  int *pi2 = & ival;  // pi2 initialized to address of ival
  int *pi3; // ok, but dangerous, pi3 is uninitialized
  pi = pi2;       // pi and pi2 address the same object, e.g. ival
  pi2 = 0;        // pi2 now addresses no object


指针初始化和赋值操作的约束


  对指针进行初始化或赋值只能使用以下四种类型的值:


  (1)0值常量表达式。


  (2)类型匹配的对象的地址。


  (3)另一对象之后的下一地址。


  (4)同类型的另一个有效指针。


  把int型变量赋给指针是非法的,尽管此int型变量的值可能为0。


void*指针


  C++提供了一种特殊的指针类型void*,它可以保存任何类型对象的地址:


 double obj = 3.14;
  double *pd = &obj;
  // ok: void* can hold the address value of any data pointer type
  void *pv = &obj; // obj can be an object of any type
  pv = pd; // pd can be a pointer to any type


----void*表明该指针与一地址值相关,但不清楚存储在此地址上的对象的类型。

----void*指针只支持几种有限的操作:与另一个指针进行比较;向函数传递void*指针或从函数返回void*指针;给另一个void*指针复制。

----不允许用void*指针操纵它所指向的对象。


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇Qt 初探信号与槽(signal & slot) 下一篇C++ 关联容器map 类型小结

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: