访问一个数组的值。

在一个数组是可见的一个方案,其中的任何一点,我们可以个别访问的任何元素的值,就好像它是一个正常的变量,从而能够同时读取和修改它的值。   格式很简单,只要:  

名[索引]  

继续上面的例子billy有5个元素,每个元素都是int类型的,我们可以用它来 ​​指每个元素的名称是以下几点:  


例如,要存储的价值75 billy中的第三个元素,我们可以写如下语句:  

 
 billy[2] = 75; 


例如,传递的第三个元素比利变量名为价值我们可以这样写:  

 
 a = billy[2]; 


因此,表达比利[2]的所有目的而言就像一个int类型的变量。  

请注意,指定的第三个元素铁罐铁罐[2],由于第一个是铁罐[0],第二个是铁罐[1],因此,第三个是铁罐[2]。   同样的原因,它的最后一个元素 billy [4]。   因此,如果我们写比利[5],我们将进入第六个元素的比利 ,因此超过数组的大小。  

在C + +语法正确超出有效范围的索引的数组。   这可能会造成问题,因为访问范围的元素不会导致编译错误,但可能会导致运行时错误。   之所以这是允许的,将被视为未来当我们开始使用指针。  

在这一点上,重要的是要能够清楚地区别括号[]数组两用。   他们执行两个不同的任务:一个是在声明时指定数组的大小,以及第二个是指定具体的数组元素的索引。   括号[]数组,不要混淆这两种可能的用途。  

 1 
 2 
 
 int billy[5]; // declaration of a new array billy[2] = 75; // access to an element of the array. 


如果你仔细阅读,你会看到一个类型说明符总是一个变量或数组声明之前,它从来没有访问之前。  

其他一些有效的数组操作:  

 1 
 2 
 3 
 4 
 
 billy[0] = a; billy[a] = 75; b = billy [a+2]; billy[billy[a]] = billy[2] + 5; 


 1 
 2 
 3 
 4 
 5 
 6 
 7 
 8 
 9 
 10 
 11 
 12 
 13 
 14 
 15 
 16 
 
 // arrays example #include <iostream> using namespace std; int billy [] = {16, 2, 77, 40, 12071}; int n, result=0; int main () { for ( n=0 ; n<5 ; n++ ) { result += billy[n]; } cout << result; return 0; } 
  12206 


多维数组


多维数组可以被描述为“数组的数组”。   例如,一个二维数组可以被想象成一个二维表的元素,所有的人都同一个统一的数据类型。  


吉米·代表一个bidimensional的3每5个元素的数组int类型。   的方式来声明这个数组在C + +将是:  

 
 int jimmy [3][5]; 


并且,例如,引用在表达式中的第二个元素的垂直和水平第四的方式将是:  

 
 jimmy[1][3] 



(记住数组索引总是由零开始)。  

多维数组并不限于两个指数(即,两维)。   根据需要,它们可以包含尽可能多的指标。   但要小心!   每个维度的数组需要迅速增加的内存量。   例如:  

 
 char century [100][365][24][60][60]; 


声明用char数组元素每一秒,在一个世纪,也就是超过3亿个字符。   因此,这个声明会消耗超过3 GB的内存!  

多维数组只是一个抽象的程序员,因为我们可以用一个简单的数组得到相同的结果,只是把其指数之间的一个因素:  

 1 
 2 
 
 int jimmy [3][5]; // is equivalent to int jimmy [15]; // (3 * 5 = 15) 


唯一的区别是多维数组的编译器会记住每个假想尺寸的深度为我们。   例如以这两段代码,两个完全相同的结果。   一个使用一个二维数组,而另一个使用一个简单的数组:  

多维数组伪多维数组
 #定义宽度5
 #定义高度为3

吉米[高度] [宽];
整数N,M;

国际主要()
 {
  组(n = 0,N <身高,N + +)
     (m = 0时,M <宽度,M + +)
     {
      吉米[N] [M] =(N +1)*(M +1);
     }
  返回0;
 }
 #定义宽度5
 #定义高度为3

吉米[高*宽];
整数N,M;

国际主要()
 {
  组(n = 0,N <身高,N + +)
     (m = 0时,M <宽度,M + +)
     {
      吉米[N *宽+ M] =(N +1)*(M +1);
     }
  返回0;
 }

上述两个源代码没有产生任何输出在屏幕上,但同时分配的内存块叫吉米通过以下方式:  


我们已经使用“定义的常量”( 定义 )的方案,以简化未来可能的修改。   的情况下,例如,我们决定放大阵列,它可以做到简单地通过改变行的高度为4而不是3:  

 
 #define HEIGHT 3 

到:  
 
 #define HEIGHT 4 


没有必要作出任何其他修改程序。  

数组作为参数

在某些时候,我们可能需要一个函数作为参数传递数组。   在C + +中是不可能的值作为参数传递给函数传递一个完整的内存块,但我们被允许通过其地址。   在实践中,具有几乎相同的效果,它是一个更快,更高效的操作。  

为了接受数组作为参数声明函数时,我们所要做的唯一的事情是在其参数中指定的元素类型的数组,一个标识符和一个的对空隙括号[]。   例如,下面的函数:  

 
 void procedure ( int arg[]) 


接受一个参数类型为“int”的叫精氨酸的数组。   为了通过这个函数声明的数组:  

 
 int myarray [40]; 


这样就足够写的调用:  

 
 procedure (myarray); 


在这里,你有一个完整的例子:  

 1 
 2 
 3 
 4 
 5 
 6 
 7 
 8 
 9 
 10 
 11 
 12 
 13 
 14 
 15 
 16 
 17 
 18 
 
 // arrays as parameters #include <iostream> using namespace std; void printarray ( int arg[], int length) { for ( int n=0; n<length; n++) cout << arg[n] << " " ; cout << "\n" ; } int main () { int firstarray[] = {5, 10, 15}; int secondarray[] = {2, 4, 6, 8, 10}; printarray (firstarray,3); printarray (secondarray,5); return 0; } 
  5 10 15 
  2 4 6 8 10 


正如你可以看到,第一个参数(参数[])接受任何数组,其元素是int类型的,无论其长度。   出于这个原因,我们已经告诉函数的第二个参数,每个数组的长度,我们作为第一个参数传递给它。   这使得循环打印出数组知道的范围内,没有走出去的范围内循环传递的数组。  

在函数声明中它也有可能包括多维数组。   立体阵列参数的格式是:  

 
 base_type[][depth][depth] 


例如,多维数组作为参数的功能可以是:  

 
 void procedure ( int myarray[][3][4]) 


请注意,第一个括号[]是空的,而下面的指定为各自的尺寸大小。   这是必要的,为了使编译器能够确定每增加一维的深度。

或多维阵列,既简单,作为函数参数传递是一个相当普遍的新手程序员的错误来源。   我建议阅读阵列如何更好地理解指针的相关章节。  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值