设为首页 加入收藏

TOP

6.2.5 指针和数组(2)
2013-10-07 00:48:37 来源: 作者: 【 】 浏览:59
Tags:6.2.5 指针

6.2.5 指针和数组(2)

2.开始定义main()函数并创建一些变量。

  1. int main() {  
  2.     const unsigned short ITEMS = 3;  
  3.     int intArray[ITEMS] = {98, -486, 301589};  
  4.     char charArray[ITEMS] = {'A''B''C'};  
  5.     double doubleArray[ITEMS] = {3.14315614, 2.74546944, 7.349e14}; 

我们创建了3个不同类型的数组,每个数组包含3个元素,数组元素的个数由常量ITEMS决定。

3.创建必要的指针。

  1. int *intPtr = intArray;  
  2. char *charPtr = charArray;  
  3. double *doublePtr = doubleArray; 

指针的类型必须与相应的数组的类型一致。我们使用各数组的名字(是intArray,不是&intArray)对它们进行了初始化。这意味着各个指针将分别保存各个数组的基地址,而不是各数组的内容。

4.利用指针输出关于第一个数组的信息,这里使用了一个循环。

  1. std::cout << "Array of integers:\n";  
  2. for (int i = 0; i < ITEMS; ++i) {  
  3.     std::cout << *intPtr << " at " 
  4.     << reinterpret_cast<unsigned long>(intPtr) << "\n";  
  5.     intPtr++;  

我们对每个数组都采用了一个for循环来访问;具体做法已经在本章前面的内容里讲解过。在各循环语句里,信息输出工作是利用指针和指针运算完成的,没有用到任何一个数组的名字和下标。

因为intPtr指针的初始值是intArray数组的基地址,所以*intPtr的初始值就是保存在这个基地址处的值,也就是intArray数组中的第一个元素的值。那些地址在被转换为一个unsigned long整数之后也被发送到了输出。循环体中的最后一条语句对指针进行了递增,让它指向数组中的下一个元素。

5.重复步骤4,对另外两个数组进行同样的处理。

  1. std::cout << "\nArray of chars:\n";  
  2. for (int i = 0; i < ITEMS; ++i) {  
  3.     std::cout << *charPtr << " at " 
  4.     << reinterpret_cast<unsigned long>(charPtr) << "\n";  
  5.     charPtr++;  
  6. }  
  7. std::cout << "\nArray of doubles:\n";  
  8. for (int i = 0; i < ITEMS; ++i) {  
  9.     std::cout << *doublePtr << " at " 
  10.     << reinterpret_cast<unsigned long>(doublePtr) << "\n";  
  11.     doublePtr++;  

这些循环语句的代码大同小异,只是其中用到的指针的名字各有不同。虽然我们在这3条循环语句里对3个不同的指针进行了同样的递增操作(都是加1),但从这个程序的运行结果可以看出:3个指针是以不同的字节个数为步长(分别对应各有关数组的数据类型)而递增的。

6.完成main()函数。

  1. std::cout << "Press Enter or Return to continue.\n";  
  2.     std::cin.get();  
  3.     return 0;  

7.把这个文件保存为arrays2.cpp,然后编译并运行这个程序(如图6-16所示)。

"提示

指针运算的重要性在高级和抽象的程序设计工作中体现得更加明显。如果你现在还体会不到其中的奥妙,也没有关系。就目前而言,只要记住数组的名字同时也是一个指向其第一个元素的指针就行了。

数组可以是任何一种数据类型,这意味着我们完全可以创建一个以指针为元素的数组--如果有必要的话。在第14章里我们会看到一个例子:用一个指针数组把命令行参数传递到程序。

指针运算并不仅限于递增,完全可以像下面这样做:

  1. int *ptr1 = myArray;  
  2. ptr1 += 2; 

执行以上语句之后,ptr1指针将保存myArray数组中的第3个元素的地址。

【责任编辑:云霞 TEL:(010)68476606】

回书目   上一节   下一节

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇6.2.2 寻找地址 下一篇6.4.2 以"引用传递"方..

评论

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