如何声明一个指向int数组的指针数组?

时间:2012-04-06 03:33:16

标签: c++ arrays pointers

我试图声明一个指针数组,每个指针指向不同大小的int数组。有任何想法吗?

5 个答案:

答案 0 :(得分:4)

int* ar[2];
int ar1[] = {1,2, 3};
int ar2[] = {5, 6, 7, 8, 9, 10};
ar[0] = ar1;
ar[1] = ar2;
cout << ar[1][2];

答案 1 :(得分:2)

从你的描述来看,听起来你正在寻找指向指针的指针。

int **aofa;
aofa = malloc(sizeof(int*) * NUM_ARRAYS);
for (int i = 0 ; i != NUM_ARRAYS ; i++) {
    aofa[i] = malloc(sizeof(int) * getNumItemsInArray(i));
}
for (int i = 0 ; i != NUM_ARRAYS ; i++) {
    for (int j = 0 ; j != getNumItemsInArray(i) ; j++) {
        aofa[i][j] = i + j;
    }
}

NUM_ARRAYS数组可能具有不同数量的元素,由getNumItemsInArray(i)函数返回的值确定。

答案 2 :(得分:0)

查看“指向对象阵列的指针”部分 http://www.functionx.com/cpp/Lesson24.htm 它可能会对你有帮助。

答案 3 :(得分:0)

在C ++中,您可以如下所示进行声明。new运算符的工作方式类似于C中的malloc。

int** array = new int*[n];

答案 4 :(得分:0)

C版本,应该有助于阐明不同类型的声明:

#include <stdio.h>

int main()
{
/* let's make the arrays first                                             */
int array_A[3] = {1, 2, 3};
int array_B[3] = {4, 5, 6};
int array_C[3] = {7, 8, 9};

/* now let's declare some pointers to such arrays:                          */
int (*pA)[3] = &array_A;
int (*pB)[3] = &array_B;
int (*pC)[3] = &array_C;  /* notice the difference:                         */
/* int *pA[3] would be an array of 3 pointers to int because the [] operator*/
/* has a higher precedence than *(pointer) operator. so the statement would */
/* read: array_of_3 elements of type_pointer_to_int                         */
/* BUT, "int (*pA)[3]" is read: pointer_A (points to) type_array_of_3_ints! */

/* so now we need a different array to hold these pointers:                 */
/* this is called an_ARRAY_of_3_pointers to_type_array_of_3_ints            */
int (*ARRAY[3])[3] = {pA, pB, pC};

/* along with a a double pointer to type_array_of_3_ints:                   */
int (**PTR)[3] = ARRAY;

/* and check that PTR now points to the first element of ARRAY:             */
if (*PTR == pA) printf("PTR points to the first pointer from ARRAY \n");

PTR++;

if (*PTR == pB) printf("PTR points to the second pointer from ARRAY! YAY!\n");

   return 0;
}

> $ clang prog.c -Wall -Wextra -std=gnu89 "-ansi"  output:   
> PTR points to the first pointer from ARRAY 
> PTR points to the second pointer from ARRAY! YAY!