2011-09-30 60 views
1

有这样的代码:指向在阵列

int tab[14][2]; 
int (*wskk)[2] = tab; // &tab makes error 

int tab2[2]; 
wskk = &tab2; // tab2 makes error 

为什么有可能使用一个指针在不同尺寸的两个阵列以指向?

+1

你是什么意思*不同类型的数组* *? – Dennis

+0

tab是int [14] [2],tab2是int [2] – scdmb

+0

我认为他指的是不同的维数 – Robb

回答

5

要了解发生了什么事情,你必须熟悉一些关键的概念:

  • 多维数组是一个数组数组;
  • 数组的名称衰减为指向其第一个元素的指针;
  • wskk的类型是“指向2个数组的指针”int s。

因此,如果你写tab你得到一个指向tab的第一要素,这是它的第一行;该行的类型为int[2],因此指向它的指针的类型为int (*)[2],这正是指针的类型。因此,您可以将tab指定为wskk,该指标现在将指向tab的第一行。

无法分配&tab它,因为你得到一个指针到整个多维数组,这是int (*)[14][2]类型。

至于第二块,它更简单:tab2是两个int s的阵列,所以它的类型是int[2]。如果你通过&运算符得到一个指针,你会得到一个int (*)[2],这是你的指针类型。实际上,它是有道理的:tab2和一排tab实际上是相同的东西(数组为2 int s)。

不能分配tab2它,因为tab2衰变到一个指向它的第一个元素,即一个int *

4

使数组到指针的转换明确的,它可能会变得更加清晰:

int tab[14][2]; 
int (*wskk)[2] = &tab[0]; // point at tab[0], which has type array of 2 int 

int tab2[2]; 
wskk = &tab2;    // point at tab2, which has type array of 2 int 

参见:How do I use arrays in C++?