这个程序使用一个指针遍历每个数组中的元素。每个元素被废弃的开关的表达,如果元素是一个元音,nvowels递增。for循环再用++运算符移动指针指向数组中的下一个字符。for循环终止时,所有的角色都被检查。
上面的程序产生的结果:
作者的文章就在一些点和错误的人。然而,我发现他的逻辑和例子是相当误导的。而不是反驳他的论点,相反的,让我看看能不能对形势的一些启发,我明白。
数组和指针不严格相同。虽然使用了指针数组,数组也包含更多信息。当你创建一个数组,编译器必须跟上数组有多少个元素。否则,编译器知道删除多少个元素时,删除[]数组不。
与非动态分配的数组,看到数组的实际大小,它是可能的:
int数组[ 5 ];cout << sizeof(排列);
这个程序打印出20(假设4字节整数)。这是数组的大小。
在另一方面:
int指针ptr =排列;cout << sizeof(PTR);
prints 4。这是指针的大小。
你访问数组的指针的时候,你访问它一点有限的方式,因为你失去的大小和原始数组的类型信息。这是一个痛苦的(因为它意味着你必须存储在一个单独的变量数组的大小,)但的实际后果的程度。
请注意,动态分配的数组:
int * pnarray = new int [ 5 ]
新的操作符返回一个指向数组的指针,这就是你所有的工作。你从来没有获得实际的阵列对象。
在功能上,你如何访问数组项,有一个实际的阵列之间的访问和访问数组的元素通过指针没有真正的区别。
所以技术上来说,它是正确的,数组和指针不相同。指针给你访问数组的信息的有限子集。实际上,它通常不值得担心的。