如何在ANSI - C中使用malloc声明动态整数数组并将输入整数放入其中



首先,我希望用户输入所需数组的大小。所以我使用:

int size;
scanf("&d",&size);

现在我想使用指针和malloc函数创建一个整数数组。我是这样做的:

int *p1 = (int*)malloc(sizeof(int)*size);

根据我的理解,这就像使用:

int p1[size];

但是我如何像数组一样使用它呢?

1:现在我想让用户输入和他写进这个"数组"一样多的整数。但是我不能使用p[0],因为它不是数组,它是指针。

2:我想把这个数组"发送"给一个函数,这个函数会得到一个整数数组。再说一次,这不是一个数组,我怎么把它"交给"函数呢?

第一个问题的答案:

for(i = 0; i < size; i++ )
{
   scanf("%d",&p[i]); 
   /*p[i] is the content of element at index i and &p[i] is the address of element 
at index i */
}

for(i = 0; i < size; i++ )
{
   scanf("%d",(p+i)); //here p+i is the address of element at index i
}

第二个问题的答案:

要将这个数组发送给函数,只需像这样调用函数:

function(p); //this is sending the address of first index of p
void function( int *p ) //prototype of the function
    问题1:1d数组和指向正确分配内存的指针几乎是一样的。
  • 问题2:当你将一个数组传递给一个方法时,你实际上是在传递该数组的第一个元素的地址

数组实际上是指向数组第一个元素的指针

您可以使用subscript -语法访问指针中的元素。

p1[3] = 5; // assign 5 to the 4th element

但是,这个语法实际上被转换成下面的

*(p1+3) = 5; // pointer-syntax

对于第二个问题,定义一个函数并传递一个指针

int* getarray(int* p1, size_t arraysize){ } //define the function
int* values = getarray(p1, size); // use the function

很抱歉打扰大家,但是Miss Upasana是对的,这是动态数组使用的正确方法。在通过malloc声明你的数组之后,你可以直接像数组一样使用它,如下所示::

       for(int i = 0; i < size; i++ )
    {
       scanf("%d",p+i); 
       /*p+i denoting address of memory allocated by malloc */
    }

第二个回答:现在只需将此地址传递给任何函数,使用地址查找如下值:

function(int *p)
/* access as &p for first value &p+2 for second p+4 for third and so on*/

相关内容

  • 没有找到相关文章

最新更新