3.6 句柄与指针
在标准C++中,指针容纳的是另一个变量或函数的内存地址。这意味着可用指针间接引用变量。
但在C++/CLI中,是“运行时”帮你管理内存,所以它保留了将内存里的东西移来移去以最大化可用内存的权利。这意味着对象可能不老是呆在一个位置。指针中的地址可能过期,使用它会出问题。
因此,C++/CLI没有了传统的“指针”概念。相反,是用句柄(也称为跟踪句柄)来包含变量的地址,“运行时”会自动更新这个地址。
虽然句柄能存储任意数据类型的内存地址,但句柄变量要声明为特定的数据类型。Person对象的句柄不能存储Account对象的地址。声明的方式和普通变量一样,只是要在变量名前附加句柄操作符^。例如:
Person ^pp;//一个Person的句柄
Account ^ac; //一个Account的句柄
注:C++/CLI有时是允许使用指针的
person ^p=gcnew person("andy")
3.7数组
数组是多个数据存储位置的集合,每个位置容纳的都是相同类型的数据,例如全部都是int,或全部都是 double。数组在表示值的集合(比如每个月的天数,或者公司员.工的姓·名),而且知道值的数量时很有用。
和传统C++不同,C++/CLI的数组知道需要管理多少个数据。这使它们比传统C++数组安全,试图越过数组尾进行读写会造成运行时错误,防止损坏内存。
每个存储位置都是数组中的一个元素。数组元素通过索引访问。索引始于零,终于数组边界减1。索引为什么不从1开始?这是为了保持与C风格语言的兼容。这些语言的数组索引都是从零开始的。
array<int>^arr = gcnew array<int>(10);//声明10个整数的数组
int x;
arr[9] = 21;1/最后一个数组元素的索引是9,实际是第10个元素x = arr[0];l/ 访问数组元素
arr[0] = 23;/第一个数组元素的索引是日
×= arr[1];//访问数组元素