0

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

4

6 回答 6

3

根据您的描述,听起来您正在寻找指向指针的指针。

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)函数返回的值决定。

于 2012-04-06T03:37:07.477 回答
3
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];
于 2012-04-06T04:54:47.497 回答
1

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!
于 2020-10-21T09:29:09.720 回答
0

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

于 2012-04-06T03:38:36.577 回答
0

在 C++ 中,您可以如下所示声明它。new 运算符可以像 C 中的 malloc 一样工作。

int** array = new int*[n];
于 2020-04-18T06:38:08.590 回答
0
#include <iostream>

using namespace std;

#define arraySize 3

const int arr1[] = {48,49,50};
const int arr2[] = {64,65,66};
const int arr3[] = {67,68,69};

typedef const int (*arrayByte);

arrayByte arrayPointer[arraySize] = {
    arr1,arr2,arr3
};

void printArr(const int arr[], int size){
    for(uint8_t x=0;x<size;x++){
        printf("value%d=%d \n",x,arr[x]);
    }
}
int main()
{
    printf("Print Array 0\n");
    printArr(arrayPointer[0],arraySize);
    printf("Print Array 1\n");
    printArr(arrayPointer[1],arraySize);
    printf("Print Array 2\n");
    printArr(arrayPointer[2],arraySize);

    return 0;
}

试试这个代码:C++ online

于 2021-09-13T19:30:16.717 回答