English 中文(简体)
定位2个动态点
原标题:Allocating Two Dynamic Pointers

我试图理解点人。 基本上,我试图把一个点子分配给另一个点,以便我获得两个层面的动态阵列。 我可以要么把小oc用于分配*A,要么(假设我已经拥有一个阵列)A? 当我试图利用我双重分配的阵列获得A3.1[5]时,汇编者拒绝让我制定方案。 我将如何建立这样一个两层分配阵列? 得到帮助。

#include <stdlib.h>
#include <stdio.h>
int main()
{
int *A;
A=(int *)malloc(sizeof(A)*100);
A[1]=(int *)malloc(sizeof(A[1])*100);
A[1][5]=10;//
printf("%d", (int)sizeof(A[1]));
free(A[1]);
free(A);
}
问题回答

我怀疑你想要的确实是两维阵,而是一阵一阵阵。

#include <stdio.h>
#include <stdlib.h>

int main()
{
   const int NUM_ROWS         = 100;
   const int NUM_INTS_PER_ROW = 200;

   // allocate a dynamic buffer of pointers; each pointer will
   // point to a 1D array of integers
   int ** rows = (int **) malloc(NUM_ROWS * sizeof(int *));

   // for each row, allocate the array of integers
   int i;
   for (i=0; i<NUM_ROWS; i++) rows[i] = (int *) malloc(NUM_INTS_PER_ROW * sizeof(int));

   // Populate the array
   for (i=0; i<NUM_ROWS; i++)
   {
      int j;
      for (j=0; j<NUM_INTS_PER_ROW; j++) rows[i][j] = 666;
   }

   // do stuff here...

   // Finally, free the data
   for (i=0; i<NUM_ROWS; i++) free(rows[i]);
   free(rows);

   return 0;
}

If you want a real 2D array (e.g. something that is laid out in a single contiguous block of memory, similar to int array[100][200], you re slightly out of luck, since C doesn t support dynamically-sized 2D arrays, but you can always fake it using a 1D array and a helper-function, like this:

#include <stdio.h>
#include <stdlib.h>

// Returns a pointer to the item in the array at the given row and column
int * GetPointerToArrayItem(int * array, int numIntsPerRow, int row, int col)
{
   return array+(row*numIntsPerRow)+col;
}

int main()
{
   const int NUM_ROWS         = 100;
   const int NUM_INTS_PER_ROW = 200;

   int * array = (int *) malloc(NUM_ROWS * NUM_INTS_PER_ROW * sizeof(int));

   // Populate the array
   int i;
   for (i=0; i<NUM_ROWS; i++)
   {
      int j;
      for (j=0; j<NUM_INTS_PER_ROW; j++) 
      {
         *GetPointerToArrayItem(array, NUM_INTS_PER_ROW, i, j) = 666;
      }
   }

   // do stuff here...

   // Finally, free the data
   free(array);

   return 0;
}




相关问题
Fastest method for running a binary search on a file in C?

For example, let s say I want to find a particular word or number in a file. The contents are in sorted order (obviously). Since I want to run a binary search on the file, it seems like a real waste ...

Print possible strings created from a Number

Given a 10 digit Telephone Number, we have to print all possible strings created from that. The mapping of the numbers is the one as exactly on a phone s keypad. i.e. for 1,0-> No Letter for 2->...

Tips for debugging a made-for-linux application on windows?

I m trying to find the source of a bug I have found in an open-source application. I have managed to get a build up and running on my Windows machine, but I m having trouble finding the spot in the ...

Trying to split by two delimiters and it doesn t work - C

I wrote below code to readin line by line from stdin ex. city=Boston;city=New York;city=Chicago and then split each line by ; delimiter and print each record. Then in yet another loop I try to ...

Good, free, easy-to-use C graphics libraries? [closed]

I was wondering if there were any good free graphics libraries for C that are easy to use? It s for plotting 2d and 3d graphs and then saving to a file. It s on a Linux system and there s no gnuplot ...

Encoding, decoding an integer to a char array

Please note that this is not homework and i did search before starting this new thread. I got Store an int in a char array? I was looking for an answer but didn t get any satisfactory answer in the ...

热门标签